2013-04-21 52 views
0

這是一個與我的問題[HERE]有關的持續性問題,如果您正在尋找一點背景知識。什麼是正確的jQuery語法用於使一個輸入的函數適用於所有輸入?

我是一個初學者&自我感興趣的網頁編碼器,希望在jQuery中放置函數,以使這些函數在任何焦點輸入/元素中工作。

我從這裏開始,有三種功能,但只在<textarea>id="dataInput_0"上有效。

<textarea 
    data-id="0" 
    class="classOne classTwo" 
    id="dataInput_0" 
    name="xInput_row_1" 
     onFocus="functionOne();" 
     onBlur="functionTwo();" 
     onKeyUp="functionThree();"> 
</textarea> 

我問及接受有關如何使用jQuery的監聽器,應用功能,以任何<textarea>細胞與給定的類很好的提示和信息。但是我只能想出如何應用的重點和模糊函數如下:

<script type="text/javascript"> 
$(document).ready(function(){ 
    $('.classOne').keypress(function(e){ 
     if (e.which == 13) 
     { 
      alert ("message-return key not allowed"); 
      return false; 
     } 
    }); 
    $('.classOne').focus(function() { 
     var d = this; 
      d.className = d.className + " InFocus"; 
    }); 
    $('.classOne').blur(function() { 
     var d = this; 
      d.className = "classOne"; 
    }); 
}) 
</script> 

而且現在<textarea>代碼:

<textarea 
    data-id="0" 
    class="classOne classTwo" 
    id="dataInput_0" 
    name="xInput_row_1" 
     onKeyUp="functionThree();"> 
</textarea> 

functionThree()是招袋在這裏。由於我對語法的限制(不存在?)理解,我遇到了將jscript函數移到javaScript函數中的麻煩。

javaScript函數與識別分隔符和分割從Excel複製的數據相關,然後粘貼到大量的<textarea>中。

代碼:

<script type="text/javascript"> 
    function functionThree() { 
     var x = document.forms["formName"]["dataInput_0"].value; 
     if (x.indexOf('\t') > 0 && x.indexOf('\n') > 0) { 
     alert ("Can't paste rows & Columns in blocks, blah, blah, blah message"); 
     document.forms["formName"]["dataInput_0"].value = ""; 
     return false; 
     } 
     else 
     if (x.indexOf('\t') > 0) { 
      var delimiterT = x.split('\t'); 
      for (var i = 0; i < delimiterT.length ; i++) 
       document.getElementById("dataInput_" + i).value = (delimiterT[i]); 
     } 
     else 
      if (x.indexOf('\n') > 0) { 
       var delimiterN = x.split('\n'); 
       var j = 0; 
       for (var i = 0; i < delimiterN.length ; i++) { 

        document.getElementById("dataInput_" + j).value = (delimiterN[i]); 
        j += 4; 
       } 
      } 
      else 
       return false; 
    } 
</script> 

j += 4;是因爲我假定的示例形式與4列。如果我有24列,顯然我會j += 24;到下一個<textarea>下的焦點。

所以上面的javaScript只適用於["dataInput_0"],我希望它能夠適用於任何集中的<textarea>

正確的jQuery語法是什麼?

在此先感謝!

+0

順便說一句,'$(本).addClass(「富可視」);'是你在你的重點處理需要; '$(this).removeClass(「InFocus」);'是你模糊處理程序中所需要的。但是我建議從這個問題中刪除那些處理程序的代碼,因爲它們正在工作,並且與您實際詢問的問題無關。還要注意,如果未找到指定的字符串,則indexOf()將返回「-1」。 – nnnnnn 2013-04-21 07:09:30

回答

0

你可以用類似的方式綁定keyup事件處理函數,但是在你的functionThree中只需使用$(this).val()來獲得textarea的值。已經jQuery的你也可以擺脫所有的getElementById的

$('.classOne').on({ 
keypress: function(){...}, 
focus: function(){...}, 
blur: function(){...}, 
keyup:function(){ 
var x = $(this).val(); 
    if (x.indexOf('\t') > 0 && x.indexOf('\n') > 0) { 
    alert ("Can't paste rows & Columns in blocks, blah, blah, blah message"); 
    $(this).val(""); 
    return false; 
    } 
    else 
    if (x.indexOf('\t') > 0) { 
     var delimiterT = x.split('\t'); 
     for (var i = 0; i < delimiterT.length ; i++) 
      $("#dataInput_" + i).val(delimiterT[i]); 
    } 
    else 
     if (x.indexOf('\n') > 0) { 
      var delimiterN = x.split('\n'); 
      var j = 0; 
      for (var i = 0; i < delimiterN.length ; i++) { 

       $("#dataInput_" + j).val(delimiterN[i]); 
       j += 4; 
      } 
     } 
     else 
      return false; 
} 
}) 
+0

謝謝@paulitto,我還沒有完成。您提供的解決方案和語法非常棒,但它只能用於我從#dataInput_0中粘貼的內容。我越來越暖和: 'else if(x.indexOf('\ t')> 0) {var delimiterT = x.split('\ t'); var di = $(this).attr('data-id'); (var i = 0; i <= delimiterT.length; i ++) $(「#dataInput_」+ di [i]).val(delimiterT [i]); – 2013-04-21 11:36:11

相關問題