我相信这很简单,但在谷歌搜索几个小时之后我找不到任何答案(也许我无法在搜索中使用正确的单词:-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______]
如何防止这种情况发生?提前谢谢。
答案 0 :(得分:4)
您的意思是'
和a
转换为а́
吗?
这是建立在系统中,你不能改变它。
你可以做的是在那之后检查输入。这样你也可以防止鼠标粘贴:
$('input').on('keydown', checkNumberInput).on('blur focus', function(){
var val = $('input').val();
// now remove everything that is not allowed
val = val.replace(/[^0-9.]+/g, '');
$('input').val(val);
})
(确切的实施绝对不完美,只是为了说明发生了什么)
https://jsfiddle.net/5afwdhzx/
关于真正的即时修复 - 给这个闭包一个名字并在keyDown函数内调用它有一些短暂的延迟,就像上面说的@haroldo一样。