7

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

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

如果用户是how I can amend the aboveor有什么想法吗?not fireininputtextarea

提前致谢,

戴夫

4

3 回答 3

15

检查 evt.target 的类型:

$(window).keydown(function (evt) {
    if (evt.target.tagName.toLowerCase() !== 'input' &&
        evt.target.tagName.toLowerCase() !== 'textarea' && evt.which == 46) { // delete
        goDoSomething();
    }
});
于 2013-02-28T11:32:34.713 回答
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();
}
});
于 2013-02-28T11:35:28.710 回答
0

尝试这样的事情:

$(window).keydown(function (evt) {
  if(evt.target != $('input') && evt.target != $('textarea')){
     if (evt.which == 46) { // delete
        goDoSomething();
     }
  }
});
于 2013-02-28T11:39:39.290 回答