【发布时间】:2016-04-13 13:52:05
【问题描述】:
我相信这是一个简单的问题,但在谷歌上搜索了几个小时后我找不到任何答案(也许我无法在搜索中使用正确的词:-P)
我有一个 javascript 方法可以防止用户用数字以外的其他字符填充文本框,如下面的代码所示,它用于 KeyDown 事件:
function checkNumberInput(e) {
// Allow: backspace, delete, tab, escape, enter and .
if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110]) !== -1 ||
// Allow: Ctrl+A, Command+A
(e.keyCode == 65 && (e.ctrlKey === true || e.metaKey === true)) ||
// Allow: home, end, left, right, down, up
(e.keyCode >= 35 && e.keyCode <= 40)) {
// let it happen, don't do anything
return;
}
// Ensure that it is a number and stop the keypress
if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
e.preventDefault();
}
}
问题在于,如果用户键入“等待”第二个键的重音字符(例如 ~´`^),则在紧随其后键入数字时,它会出现在文本框中。
例如:
a) types 1 => [1________]
b) types ~ => [1________]
c) types 3 => [1~3______]
如何防止这种情况发生?提前致谢。
【问题讨论】:
-
如果你也添加keyUp事件呢?
-
在keyUp事件结束时,也许您可以扫描输入的'value'属性以查找非数字字符,如果找到则将其删除;也许您可以使用
setTimeout()安排对“value”属性的检查,以便在 keyUp 后几毫秒执行... -
我用过@Al.G.方法与 keyUp 结合,它成功了。我想删除“写擦除”效果,但我认为这是不可能的。谢谢大家的帮助!
-
@thiagoprzy 看看我的答案更新。该演示可以满足您的需求。对了,你为什么不用
<input type=number>? -
@Al.G.,客户不希望“箭头”增加和减少在框边呈现的值 =)
标签: javascript jquery html keycode