如果使用jquery关注输入字段以外的任何内容,如何禁用退格

sad*_*ave 8 jquery input keystroke backspace

如果使用jquery专注于2个特定输入字段以外的任何内容,如何禁用退格键击?

这是我目前的代码(现在包括2个文本框):

$(document).keypress(function(e){
  var elid = $(document.activeElement).attr('id');
  if(e.keyCode === 8 && elid != 'textbox1' || elid != 'textbox2'){
      return false;
  };
});
Run Code Online (Sandbox Code Playgroud)

这不起作用....任何想法?

Kar*_*han 12

我认为这样可以解决问题:

$(document).keydown(function(e) {
    var elid = $(document.activeElement).hasClass('textInput');
    if (e.keyCode === 8 && !elid) {
        return false;
    };
});
Run Code Online (Sandbox Code Playgroud)

假设文本框具有类'textInput'.

这是一个有效的例子


Hud*_*lta 8

这将禁用站点上的退格,而无需向输入框添加特定类.要禁用退格键,除非使用输入框时使用.is("input:focus")如果要禁用退格键,除非使用textarea框时使用.is("input:focus,textarea:focus")

$(document).keypress(function(e){ 
    var elid = $(document.activeElement).is("input:focus"); 
    if(e.keyCode === 8 && !elid){ 
       return false; 
    }; 
});
Run Code Online (Sandbox Code Playgroud)


Jps*_*psy 6

Hudson-Peralta + QF_Developer的解决方案很棒,但它有一个缺陷:
如果你的焦点在一个单选按钮或复选框上,退格按钮仍会让你退出页面.这是一个避免这种差距的修改:

$(document).keydown(function(e){ 
  var elid = $(document.activeElement).is('input[type="text"]:focus, textarea:focus'); 
    if(e.keyCode === 8 && !elid){ 
      return false; 
    }; 
});
Run Code Online (Sandbox Code Playgroud)

编辑20130204:
keypress()取而代之keydown()!
上面的代码现在可以正常工作.

编辑20151208:
正如@outofmind的评论中所提到的,当按下退格键时,有更多的输入类型可能会让你失望.请在is()方法的逗号分隔选择器列表中添加任何类型的输入字段,这些字段允许直接输入字符,并且实际上在HTML代码中使用,例如input[type="password"]:focus,input[type="number"]:focusinput[type="email"]:focus.


QFD*_*Dev 5

我认为需要稍微修改来处理textareas:

var elid = $(document.activeElement).is("input:focus, textarea:focus"); 
Run Code Online (Sandbox Code Playgroud)