1

我有一个价格字段,我只想接受数字(我不喜欢默认的 html5 输入,如 input[number] 等)所以我写了这个:

<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 中接受 % !我还发现了一个简单的正则表达式代码,同样的问题。我怎样才能让火狐看懂?!

4

1 回答 1

4

实际上keyCodes%left arrow key 是不一样的。

  • %
    • .charCode == 37
    • .keyCode == 0
    • .which == 37
  • left arrow
    • .charCode == 0
    • .keyCode == 37
    • .which == 0

您需要修复程序逻辑,而不是通过... = theEvent.keyCode || theEvent.which.

(原始)键盘处理无论如何都是一团糟,直到浏览器开始正确和完全地实现.key.char

于 2013-10-22T08:18:00.200 回答