我有一个价格区域,我想接受只是数字(我不喜欢输入[数字]等默认的html5输入。)所以我写了这个:
<input type="text" name="price" placeholder="" onkeypress="validate(event)">
function validate(evt) {
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode( key );
var code = theEvent.keyCode || theEvent.which;
var regex = /[0-9]/;
if( !regex.test(key) && code != 8/*backspace*/ && code != 37/*left*/ && code != 39/*right*/ && code != 13/*enter*/ && code != 46/*delet*/ && code != 9/*tab*/){
theEvent.returnValue = false;
if(theEvent.preventDefault) theEvent.preventDefault();
};
};
当你看到一些字符如左右箭头键,标签等被添加以便更好地导航。它在Chrome中运行完美。在Firefox中,无意中添加了一些字符。例如,左箭头键和%的键代码是相同的!所以现在我的价格字段在Firefox中接受%!我还发现了一个简单的正则表达式代码,同样的问题。如何让Firefox了解?!
答案 0 :(得分:4)
实际上keyCode
和%
的{{1}}不一样。
left arrow key
%
.charCode == 37
.keyCode == 0
.which == 37
left arrow
.charCode == 0
.keyCode == 37
您需要通过.which == 0
修复您的程序逻辑而不是密码。
(原始)无论如何,键盘处理都是一团糟,直到浏览器开始正确且完整地实现.key
and .char
。