2014-04-01 39 views
0

我有这个功能,只允许在按键中的数字我如何改变这个功能或方法来调用,所以当我做CTRL + V验证太值?只允许在JS中的数字,并验证过去

function isNumberKey(evt, obj) { 
    var containsDot = obj.value.indexOf("."); 
    var nrDecimals = Decimals(obj.value, "."); 

    var charCode = (evt.which) ? evt.which : event.keyCode; 
    if (charCode == 8 || charCode == 9) { 
     return true; 
    } else if (charCode > 31 && (charCode < 48 || charCode > 57)) { 
     if (charCode == 46 && containsDot < 0) { 
      return true; 
     } 
     return false; 
    } 
    if (nrDecimals > 2) { 
     return false; 
    } 
    return true; 
} 

我把它叫做这样

onkeypress事件= “返回isNumberKey(事件,这一点);”

+0

可能的解决方案:http://stackoverflow.com/questions/15333668/javascript-trigger-on-keypress-and-paste – ArKano

+0

除了复制粘贴,用户还可以拖放文本,它会更好,如果你可以验证表格提交 – Arvind

回答

2

如果你只想在你输入号码,你可以做这样的事情:

onkeyup="this.value = this.value.replace(/[^0-9]+/, '');" 

这从值替换所有非数字字符。这和你的整个功能的功能差不多,加上它可以和粘贴一起使用。您需要将onkeypress更改为onkeyup


要获得完整的解决方案,您需要切换到更复杂的代码。正如下面的评论所述,你可以右键 - >粘贴。这不会抓住这一点。您需要将多个事件(按键,键入,点击是事件的示例)绑定到该输入。如果你幸运的话,focus会抓住它(如果右键模糊它,并在粘贴后重点)。

+1

“加上它与粘贴一起使用。” - 好吧,它[不适合我](http://jsfiddle.net/GaurangTandon/LRa8m/)。我认为它应该是'onkeyup' –

+0

过去并不确定,这就是为什么我建议改变密码。修正:) – Martijn

+0

现在它看起来不错+1 –

0

你可以使用jQuery。根据您的要求更改下面的代码。

$(document).ready(function() { 
     $("#id") 
      .bind('copy', function(e) { 
       alert('copying!'); 
      }) 
      .bind('paste', function(e) { 
       alert('pasting!'); 
      }) 
      .bind('cut', function(e) { 
       alert('cut!'); 
      }); 
    }); 

如果你想使用平面的JavaScript。我认为下面会工作,但不确定浏览器的兼容性。

<input type="text" onpaste="callFunc()" /> 
+0

我添加了链接。在你的代码中并不需要它,但我认为突出这个用户和其他用户的可能性是一个好主意,因为这是jQuery – Martijn

+0

的强大实力。谢谢 ! –