【问题标题】:JavaScript Keyboard Key Code 0 in FirefoxFirefox 中的 JavaScript 键盘键代码 0
【发布时间】:2015-11-10 02:00:52
【问题描述】:

我有以下代码,我试图在输入中只允许 3 位数字 0-9,但仍允许用户使用箭头键、退格键和删除键。

它可以在其他浏览器中使用,但在 Firefox 中,控制台的输出显示箭头键和注册为键代码 0 的删除键。什么给出?

代码:

$input.
    keypress(function(e) {
        var currentLength = $input.val().length;
        var c = e.which;
        console.log("key", c);
        //0=48, 9=57, 37-40 = arrow keys 8= backspace,  46=delete
        if (c === 8 || c === 46 || (c >= 37 && c <=40)) {
            //delete, backspace, and arrow keys are allowed
        } else if (c < 48 || c > 57 || currentLength >= 3) {
            e.preventDefault();
        }
    }).on("paste", function(e) {
        e.preventDefault();
    });

小提琴:http://jsfiddle.net/2cjpdfcy/

【问题讨论】:

  • 请注意,事件 'input' 只会触发更改输入值的键,因此您不必关心箭头键。
  • @Taplar 这是一个很好的建议,但不幸的是我仍然必须支持 IE 8 :( 不过谢谢!

标签: javascript jquery firefox


【解决方案1】:

替换这个:

var c = e.which;

与:

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

一切都会奏效。

http://jsfiddle.net/2cjpdfcy/2/

【讨论】:

【解决方案2】:

要获取所有键码,请使用 keyup 而不是 keypress

$input.keyup(function(e) {
    // your logic...
});

Updated fiddle

【讨论】:

  • 所以这绝对有效,但您介意解释一下为什么会这样吗? keyup 事件有什么不同?您对 Sergio 的解决方案也有任何意见吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多