键盘,但在输入或文本区域处于焦点时不是

时间:2017-07-04 12:27:07

标签: javascript html

我正在使用以下代码:

$(document).keypress(function (e) {
    if (e.which === 68 || e.which === 100) {
        doStuff();
    }
});

我想要的是将键'D'捕获为我页面中功能的快捷方式。问题是,这个页面有输入和textarea控件,当我在这个控件上运行时,会调用'doStuff()'函数。

如何避免它?只有当用户没有在可编辑控件中输入任何内容时,我才想要键'D'捕获。

谢谢!

4 个答案:

答案 0 :(得分:3)

e.target之外,您可以测试当前活动元素是输入还是文本区域:

$(document).keypress(function (e) {
  var focussedTag = document.activeElement && document.activeElement.nodeName;
  if( focussedTag === 'INPUT' || focussedTag === 'TEXTAREA' ) {
    return;
  }
  if (e.which === 68 || e.which === 100) {
    doStuff();
  }
} );

小提琴:https://jsfiddle.net/e1qtapo6/

答案 1 :(得分:1)

在执行'doStuff'功能之前添加另一个检查。检查用户是否有任何焦点的输入元素,如果为true则只执行语句。

这样的事情:

$(document).keypress(function (e) {
    if ( (e.which === 68 || e.which === 100) && (!$(input).is(":focus")) ) {
        doStuff();
    }
});

答案 2 :(得分:1)

$(document).on('keypress', ':not(:input)', function (e) {
    if (e.which === 68 || e.which === 100) {
        doStuff();
    }
});

答案 3 :(得分:1)

另一个 -

  $(document).keypress(function (e) {
    if (e.which === 68 || e.which === 100) {
        var _node = e.target.nodeName;
        if( _node !== "INPUT" && _node !== "TEXTAREA" ){
          doStuff();
        }
    }
  });