繁体   English   中英

仅允许输入 javascript 中的数字并允许复制和粘贴?

[英]Only allow numbers in an input with javascript and allow copy and paste?

我使用这个 function 只允许文本输入中的数字。

$('input').bind('keydown', function(e) {

    var key = e.charCode || e.keyCode || 0;

    return (
         key == 8 ||
         key == 9 ||
         key == 46 ||
         (key >= 37 && key <= 40) ||
         (key >= 48 && key <= 57) ||
         (key >= 96 && key <= 105));
});

我怎么也允许复制和粘贴? 我试过为控制添加键码 17,但它仍然不起作用。

您需要为组合键做些特别的事情吗?

谢谢

你最好用这样的东西:

$('input').bind('keyup', function(e) {
  this.value = this.value.replace(/[^0-9]/g,'');
});

或者您也可以使用change事件。 在这种情况下,无论数据如何进入字段,都将对其进行验证(并删除非数字输入)。

input事件比keypresskeydownchange更强大/更灵活,它对任何类型的变化做出反应:程序或用户类型,例如按键或复制/粘贴事件。

 // Initial valid input state let prevValue = '' let prevSelectionStart = 0 function allowNumbersOnly(event) { const input = event.target let value = event.target.value // Check if value is number let isValid = +value == +value if (isValid) { // preserve input state prevValue = value prevSelectionStart = input.selectionStart } else { // restore previous valid input state. // we have to fire one more Input event in order to reset cursor position. var resetEvent = new InputEvent('input') input.value = prevValue input.selectionStart = prevSelectionStart input.selectionEnd = prevSelectionStart input.dispatchEvent(resetEvent) } }
 <input type="text" oninput="allowNumbersOnly(event)">

记录最后按下的键码。 由于您使用的是onkeydown ,因此 cmd-v 将显示为键码为 224 (cmd) 的事件,然后显示为键码为 86 (v) 的事件。 如果前面的密钥匹配 cmd 和后面的 v,则允许它通过。

(您可能还会检查 Windows/Linux 贴纸的 ctrl)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM