关于firefox的关键代码

时间:2014-01-11 11:43:17

标签: javascript events firefox onkeypress

我必须从html输入中禁用一些符号。 e.which在Firefox上无法正常运行。 Firefox禁用backspace等。 这是JS Fiddle

var code = window.event ? event.keyCode : e.which;

event.keyCode适用于Firefox,但不适用于String.fromCharCode(code)

2 个答案:

答案 0 :(得分:2)

jQuery规范化e.which,因此您根本不必担心这一点 此外,只是听取正确的密钥代码要容易得多,没有理由将密钥代码转换为字符只是为了用indexOf过滤掉它?

$('#foo').keydown(function(e) {
    var code = e.which;
    if (code == 8 || code == 13) return true; // backspace and enter
    if (code < 48 || code > 57 || code == 188 || code == 190) return false;
});

FIDDLE

为了保持大多数键处于活动状态,并且主要禁用字符,您可以像这样过滤

$('#foo').keydown(function(e) {
    var key = e.which;
    if (!e.shiftKey && !e.altKey && !e.ctrlKey && 
        key >= 48 && key <= 57 ||  // numbers   
        key >= 96 && key <= 105 || // Numeric keypad
        key == 190 || key == 188 || key == 109 || key == 110 || // comma, period and minus, . on keypad
        key == 8 || key == 9 || key == 13 ||  // Backspace and Tab and EnterEnd
        key == 35 || key == 36 || // Home and 
        key == 37 || key == 39 || // left and right arrows
        key == 46 || key == 45) // Del and Ins
        return true;

    return false;
});

FIDDLE

答案 1 :(得分:0)

您的脚本中有两个错误:

  1. 您调用了事件参数event,但提到了e.which
  2. 2。您必须调用evt.preventDefault()以防止出现键入的字符。
    添加jQuery事件处理程序时,后一点是错误的。 “正常”DOM处理程序需要preventDefault(),另请参阅this comment


    → jsFiddle

    $('#foo').keypress(function(evt) {
        var code = window.event ? event.keyCode : evt.which;
        var chr = String.fromCharCode(code);
        if ("0123456789.,".indexOf(chr) < 0) {
            return false;
        }
    });