jQuery热键......不那么全球化

时间:2012-05-01 18:24:36

标签: jquery events dom hotkeys codemirror

基本上,我正在使用Resig先生的jQuery Hotkeys plugin来捕获和处理ctrl+o等短信...

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

例如,以下代码通常可用...

jQuery(document).bind('keydown', 'ctrl+o', fn);

但是,如果用户在输入框内触发热键,它就会失败。

只有在执行以下操作时才有效:

jQuery('body, input').bind('keydown', 'ctrl+o', fn);

这对我的健康非常不利,因为它涉及每次在DOM中添加新输入框时绑定该死的处理程序。更糟糕的是,在CodeMirror等复杂小部件的情况下,我不知道要绑定什么。

Dunno,如果我的问题有道理,也许我使用了错误的方法?我也尝试绑定到以下对象,但它不起作用:windowdocumentbodydiv[contains the whole page]

NB:您可以try it out here

2 个答案:

答案 0 :(得分:6)

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

// 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;
}

答案 1 :(得分:1)

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

或者,当我浏览时,我发现了shortcut.js,它提供了与Jquery-Hotkeys类似的功能。

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