[英]How to allow only numbers on a text input but allow commands with 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
事件比keypress
、 keydown
或change
更强大/更灵活,它对任何类型的变化做出反应:程序或用户类型,例如按键或复制/粘贴事件。
// 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.