javascript - keyCode 问题 - 无法阻止输入 % 字符

标签 javascript keycode

在我的 HTML 页面中有一个输入文本字段。我只想输入键盘上的数字键和左/右箭头。我尝试了以下 JavaScript,但遇到了问题。

<input onkeypress="return allowNumberOnly(event)" />

function allowNumberOnly(event) {
    event = event || window.event;
    var charCode = (event.which) ? event.which : event.keyCode;

    //keyCode 48-57 represent the number 0-9
    //keyCode 37,39 represent the Left and Right arrow
    //keyCode 46 represent the Delete key
    //keyCode 8 represent the Backspace key

    return charCode == 37 || charCode == 39 || charCode == 46 || charCode == 8
              || (charCode >= 48 && charCode <= 57);
}

测试这段代码后,我发现一个问题,左箭头和%特殊字符的keyCode都是37。所以我不能阻止用户在允许左箭头的同时输入%字符。我不知道为什么会这样。我一直认为键盘上的每个键的 keyCode 应该是唯一的。我想到了使用 onkeyup 而不是 onkeypress。但是 onkeyup 将允许用户先输入无效字符,然后从输入文本中删除。这种行为不是我想要的。任何建议将不胜感激。

我在 FireFox 中调试代码,发现有如下区别。

<强>1。如果输入%,event.which == 37 and event.keyCode == 0
2.如果输入左箭头,event.which == 0 and event.keyCode == 37

这个问题似乎可以通过使用这个差异来解决。我会继续在 IE 和 Chrome 中尝试。

最佳答案

此链接包含有关键盘事件的更多信息

http://unixpapa.com/js/key.html

我也做了jQuery版

$('input').keypress( function( e ){ 

    var code = e.which || e.keyCode ; 

    if ( !( e.shiftKey == false &&
            (
               code == 46 ||
               code == 8 ||
               code == 37 ||
               code == 39 ||
               ( code >= 48 && code <= 57 ) 
            )
         )
    ){

         e.preventDefault();                   
    }

});

http://jsfiddle.net/UGpUJ/ 上查看

关于javascript - keyCode 问题 - 无法阻止输入 % 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15715256/

相关文章:

javascript - 处理向服务器发出 HTML/JS 请求时的 302 状态代码?

javascript - 将 jQuery onClick 切换为 keyCode

java - 找不到符号 event.getKeyCode()

javascript - 在javascript中从平面数组构建树数组

JavaScript/jQuery : Unable to get proper keyCode when capsLock is ON

java - 调用需要 KeyEvent 参数的函数

javascript - 按 T​​AB 键后按 ENTER 键触发按钮

javascript - app.use(path, router) 匹配,但如何提取路径中的命名参数

javascript - 未捕获的安全错误 : Failed to read the 'contentDocument' property from 'HTMLIFrameElement' : Blocked a frame

javascript - 合并共享公共(public)键或值的对象