jQuery热键…不是那么全局的

jQuery热键…不是那么全局的,jquery,events,dom,hotkeys,codemirror,Jquery,Events,Dom,Hotkeys,Codemirror,基本上,我使用mrresig来捕获和处理快捷方式,如ctrl+o等 好吧,也许我不理解这个概念,但我的印象是,文档中任何地方触发的ctrl+o都会被文档热键处理程序捕获 例如,下面的代码通常是有效的 jQuery(document).bind('keydown', 'ctrl+o', fn); 但是,如果用户在输入框内触发热键,则会失败得很惨 仅当我执行以下操作时,它才起作用: jQuery('body, input').bind('keydown', 'ctrl+o', fn); 这对我的

基本上,我使用mrresig来捕获和处理快捷方式,如
ctrl+o

好吧,也许我不理解这个概念,但我的印象是,文档中任何地方触发的
ctrl+o
都会被文档热键处理程序捕获

例如,下面的代码通常是有效的

jQuery(document).bind('keydown', 'ctrl+o', fn);
但是,如果用户在输入框内触发热键,则会失败得很惨

仅当我执行以下操作时,它才起作用:

jQuery('body, input').bind('keydown', 'ctrl+o', fn);
这对我的健康非常不利,因为每次向DOM中添加新的输入框时都会绑定该死的处理程序。更糟糕的是,对于像CodeMirror这样复杂的小部件,我不知道绑定到什么

不知道我的问题是否有道理,也许我使用了错误的方法?我还尝试绑定到以下对象,但没有成功:
window
document
body
div[包含整个页面]


NB:您可以。

这实际上是插件的预期功能:

// Don't fire in text-accepting inputs that we didn't directly bind to
if ( this !== event.target && (/textarea|select/i.test( event.target.nodeName ) ||
    event.target.type === "text") ) {
    return;
}

是的,如果用户在输入框中触发热键,JqueryHotkeys就会失败

或者,当我浏览时发现,它提供了与Jquery热键类似的功能


重要的是它还有一个选项,可以在输入框中启用或禁用“用户定义的快捷方式功能”。

您可以在这里使用
on()
?因此,它将适用于所有添加的输入。还是我遗漏了什么?@Topener我不想只绑定到所有当前的输入,但也要绑定到任何未来的输入。以这种方式添加事件的好处在于,您不需要全局变量来包含事件处理函数,只需在需要时执行一次即可。但这里的重点不是我添加事件,而是热键功能应该自己执行。我的意思是,这就是热键的要点……在Netbeans编辑器中按
ctrl+s
会产生与在Netbeans项目列表中执行相同的效果(例如)。类似于jQuery('body').bind(…)和jQuery('body').children().bind(…)?@Edward也许这太难理解了,但这里有:
.children()
或任何其他jQuery选择器对现有元素有效,而不是将来可能添加的任何元素。我需要全局热键,而不是每次更改DOM时都在任何地方绑定事件。老实说,我不知道如何在不更改代码的情况下解决我的问题:(我想我可以通过一个选项来禁用该功能……然后向Resig提交一个补丁……是的,如果不以某种方式修改插件,我看不到解决方法。好吧,谢谢你指出。我不知道为什么我没有想到首先检查插件代码……我很高兴地宣布,这也解决了我的iss问题。)使用CodeMirror。