10

基本上,我使用Resig 先生的jQuery Hotkeys 插件来捕获和处理诸如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[contains the whole page]

注意:你可以在这里试试

4

2 回答 2

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;
}
于 2012-05-01T18:40:11.823 回答
1

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

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

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

于 2012-07-17T13:59:25.140 回答