Javascript 特定条件下的jquerykeypress处理程序

Javascript 特定条件下的jquerykeypress处理程序,javascript,jquery,event-bubbling,dom-events,Javascript,Jquery,Event Bubbling,Dom Events,我有一个网页,它有很多“窗口”,没有用iFrame或任何愚蠢的东西包装。每个“窗口”都是自己的“应用程序” 其中一个应用程序中有大量DOM元素。我想将一个侦听器绑定到该应用程序,该应用程序被封装在一个DIV中,并想捕获一些热键按下,例如左箭头和右箭头 但是,如果某个元素(比如这个应用程序中的输入)得到了左键或右键,我想忽略它 问题: 上面的意思是我基本上只想捕捉div上的按键。我可以添加一个tabindex,但是如果有人在该应用程序中单击,div不会关注自己,因此我不确定该怎么办: $(

我有一个网页,它有很多“窗口”,没有用iFrame或任何愚蠢的东西包装。每个“窗口”都是自己的“应用程序”

其中一个应用程序中有大量DOM元素。我想将一个侦听器绑定到该应用程序,该应用程序被封装在一个DIV中,并想捕获一些热键按下,例如左箭头和右箭头

但是,如果某个元素(比如这个应用程序中的输入)得到了左键或右键,我想忽略它

问题:
  • 上面的意思是我基本上只想捕捉div上的按键。我可以添加一个tabindex,但是如果有人在该应用程序中单击,div不会关注自己,因此我不确定该怎么办:


$('.app wrapper')。在('keypress',function()上{
//…我认为这行不通。
});

  • 我不会告诉我应用程序中的每个有效输入/文本区域停止在按键上传播


有没有什么好的解决方案可以在没有重大黑客工作的情况下实现上述目标?

好的,我设法找到了答案

我的第一个投诉最终确实有效,然后与$(element)[0]结合使用。nodeName,它处理了后一个投诉:

HTML
您可以在侦听器函数中查看
e.target

$('.app-wrapper').on('keypress', function(e){
    if(e.target.tagName === 'DIV'){ //Or, more jQuery-esque: $(e.target).is('div')
         console.log("Wooo, I'm totally a div. Let's do stuff");
    }
});

这样,您就可以忽略在“有效”元素中触发的按键。

比我快2分钟!干得好。也许,我的答案中的代码更“精简”?不过,这并不重要。哈哈,谢谢你的回答+1告诉我。标记名独立于jQuery。
<div class='app-wrapper'><!-- behold ye content --></div>
$('.app-wrapper').attr('tabindex', 1);

$('.app-wrapper').on('keypress', function(e){

  var nodeName = $(e.target)[0].nodeName;
  if (nodeName == 'INPUT' || nodeName == 'TEXTAREA') {

    // bug off...
    return;
  }

  // handle key press now.
});
$('.app-wrapper').on('keypress', function(e){
    if(e.target.tagName === 'DIV'){ //Or, more jQuery-esque: $(e.target).is('div')
         console.log("Wooo, I'm totally a div. Let's do stuff");
    }
});