Firefox中退格键的问题

7

我有一个文本框,使用jquery仅允许输入英文字母和空格。在谷歌浏览器中可以正常工作,但在火狐浏览器中退格键无法使用。

<input type="text" placeholder="" id="id1">

$(function(){
$('#id1').keypress(function (event) {
      if ((event.which >= 65 && event.which < 91) || (event.which > 96 && event.which < 123) || event.which === 32 || event.which===0) {
          return true;
      }
        else {
          event.preventDefault();
      }
 })});

这是Plnkr

2个回答

11

这是浏览器处理退格字符的方式不同所导致的差异。在Chrome中,退格键从不到达keypress事件处理程序,但在Firefox中会到达。

如果您将 || event.which === 8 添加到条件语句中,您将允许退格并返回true,在Firefox中就能正常工作了。

编辑:在Firefox中,箭头向上、向下、向左、向右和Tab键也无法正常工作。

var ignoredKeys = [8, 9, 37, 38, 39, 40];

if (ignoredKeys.indexOf(event.which) >=0 || (event.which >= 65 && event.which < 91) || (event.which > 96 && event.which < 123) || event.which === 32 || event.which===0) {
    return true;
} else {
    event.preventDefault();
}

1
这应该在所有[主要的]浏览器中都可以工作:

$('#id1').keydown(function (event) {
    if (event.which == 8) {
        // ...
    } else {
        event.preventDefault();
    }
);

请注意使用 keydown 而不是 keypress,这对于它的正常工作至关重要。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接