【发布时间】:2012-05-11 05:58:54
【问题描述】:
基本上,我正在使用 Resig 先生的 jQuery Hotkeys plugin 来捕获和处理诸如 ctrl+o 等的快捷方式...
好吧,也许我不理解这个概念,但我的印象是,文档内的 anywhere 触发的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]
注意:你可以try it out here。
【问题讨论】:
-
也许你可以在这里使用
on()?所以它适用于每一个添加的输入。还是我错过了什么? -
@Topener 我不想只是绑定到所有 current 输入,但也不想绑定到任何 future 输入.以这种方式添加事件的好处在于您不需要全局变量来包含事件处理函数,您只需在需要时执行一次。
-
但是这里的重点不是我添加事件,而是热键功能应该自己做。我的意思是,这就是热键的意义......在 Netbeans 编辑器中按
ctrl+s会产生与在 netbeans 项目列表中执行此操作相同的效果(例如)。 -
类似 jQuery('body').bind(...) 和 jQuery('body').children().bind(...) 的东西?
-
@Edward 也许它太难掌握了,但这里有:
.children()或任何其他 jQuery 选择器适用于 现有元素,而不是将来可能添加的任何元素.我需要全局热键,而不是每次更改 DOM 时都绑定事件。
标签: jquery events dom hotkeys codemirror