jQuery keydown但在文本框中忽略

时间:2013-02-28 11:30:38

标签: javascript jquery

我正在调用一个函数(如下所示),如果用户按下删除按钮,该函数将执行操作。它工作正常,但我只需要在页面上进行,而不是在用户输入时(在输入内或在textarea内)。

$(window).keydown(function (evt) {
    if (evt.which == 46) { // delete
        goDoSomething();
    }
});

如果用户为how I can amend the above not firein,则inputtextarea的任何提示都会生效?

提前致谢,

戴夫

3 个答案:

答案 0 :(得分:14)

检查evt.target的类型:

$(window).keydown(function (evt) {
    if (evt.target.tagName.toLowerCase() !== 'input' &&
        evt.target.tagName.toLowerCase() !== 'textarea' && evt.which == 46) { // delete
        goDoSomething();
    }
});

答案 1 :(得分:0)

您可以拥有一个全局变量,并在关注文本框时将其设置为某个值并在模糊时重置它。像这样:

var textboxSelected = false;

$(":input").focus(function () {
     textboxSelected = true;
});
$(":input").blur(function () {
     textboxSelected = false;
});

然后在你的onKeyDown事件中检查变量是否设置为false,然后再执行其余的功能:

$(window).keydown(function (evt) {
if (evt.which == 46 && textboxSelected == false) {

    goDoSomething();
}
});

答案 2 :(得分:0)

尝试这样的事情:

$(window).keydown(function (evt) {
  if(evt.target != $('input') && evt.target != $('textarea')){
     if (evt.which == 46) { // delete
        goDoSomething();
     }
  }
});