我使用 .on() 来绑定 Dojo 中的 keydown 事件。事件触发后,我需要取消绑定事件,但似乎没有任何效果。他们的文档说该事件返回一个具有 .remove() 方法的对象,但我终其一生都无法弄清楚如何访问或应用此方法。
任何帮助将不胜感激。
谢谢!
query('#video-topics-input').on('keydown',function(e){
topicsDrop.keyDownFunc(e, e.keyCode);
});
dojo.on 返回一个事件句柄,该句柄具有上述 .remove 函数以取消绑定侦听器。但是,在您的情况下,您使用的是在 dojo.NodeList 上运行的链式 dojo.query。
这基本上意味着您必须考虑数组,上面的示例将返回一个包含一个条目的数组 - 因为选择器是一个 ID。
绑定事件监听器:
var eventHandles = query('#video-topics-input').on('keydown',function(e){
topicsDrop.keyDownFunc(e, e.keyCode);
});
并取消绑定这些:
eventHandles.forEach(function(handle) { handle.remove() });
一种更有效的方法是不使用查询来查找 byId
有几件事要添加到@mschr 的答案中
正如他所提到的,如果您通过 id 查找,您可能应该使用返回单个 domNodedojo/dom
的函数。byid
如果你这样做,你还可以利用dojo/on
'once
函数,它完全按照它所说的去做——它会触发事件处理程序一次然后断开它。
require(['dojo/dom','dojo/on',function(dom,on){
var node = dom.byId('video-topics-input');
on.once(node, 'keydown',function(e){
//some event handler that should only be fired once.
});
});