我想,以防止对keydown事件数量的输入文本框上,并运行自定义的处理函数。 这里有问题
-
e.target.value
是无用的,因为键值不投射到目标值还 -
e.keyCode
的数量取决于键盘类型,语言布局,FN键或Shift键 -
String.fromCharCode(e.keyCode)
是不可靠的,至少在我的键盘(QWERTY捷克) - W3规范说
e.keyCode
是一个传统的属性,并建议e.char
代替,但它不是在浏览器中实现尚未
所以它出现在文本框之前,如何捕捉到数字输入?
使用keypress
事件代替。 这是它会给你有关被输入的字符信息的唯一关键事件,通过which
在大多数浏览器性能和(易混淆)的keyCode
在IE属性。 利用这一点,你可以有条件地抑制keypress
根据输入的字符事件。 然而,这不会帮助你阻止用户粘贴或包含数字字符的文本拖动,所以你仍然需要一些额外的验证。
我最喜欢的JavaScript的关键事件参考: http://unixpapa.com/js/key.html
textBox.onkeypress = function(e) {
e = e || window.event;
var charCode = (typeof e.which == "undefined") ? e.keyCode : e.which;
var charStr = String.fromCharCode(charCode);
if (/\d/.test(charStr)) {
return false;
}
};
试试这个来代替整数值:
<input onkeydown="Check(this);" onkeyup="Check(this);"/>
<script>
function Check(me) {
me.value = me.value.replace(/[0-9]/g, "");
}
</script>
为了防止整数输入:
<input onkeydown="Check(event);" onkeyup="Check(event);"/>
<script>
function Check(e) {
var keyCode = (e.keyCode ? e.keyCode : e.which);
if (keyCode > 47 && keyCode < 58) {
e.preventDefault();
}
}
</script>
我在这里发布我的回答。 您可以使用ISNUMBER检查,这是对的keydown输入的字符。 请确保您处理上的keydown数字键盘键如下图所示答案。 https://stackoverflow.com/a/42917293/5076414
我的解决方案,以防止浮码字符
// 'left arrow', 'up arrow', 'right arrow', 'down arrow',
const = arrowsKeyCodes: [37, 38, 39, 40],
// 'numpad 0', 'numpad 1', 'numpad 2', 'numpad 3', 'numpad 4', 'numpad 5', 'numpad 6', 'numpad 7', 'numpad 8', 'numpad 9'
const = numPadNumberKeyCodes: [96, 97, 98, 99, 100, 101, 102, 103, 104, 105],
export const preventFloatingPointNumber = e => {
// allow only [0-9] number, numpad number, arrow, BackSpace, Tab
if ((e.keyCode < 48 && !arrowsKeyCodes.includes(e.keyCode) || e.keyCode > 57 &&
!numPadNumberKeyCodes.includes(e.keyCode)) &&
!(e.keyCode === 8 || e.keyCode === 9))
e.preventDefault()
}