2013-04-21 32 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