2

我使用 .on() 来绑定 Dojo 中的 keydown 事件。事件触发后,我需要取消绑定事件,但似乎没有任何效果。他们的文档说该事件返回一个具有 .remove() 方法的对象,但我终其一生都无法弄清楚如何访问或应用此方法。

任何帮助将不胜感激。

谢谢!

    query('#video-topics-input').on('keydown',function(e){
        topicsDrop.keyDownFunc(e, e.keyCode);
    });
4

2 回答 2

4

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

于 2012-06-21T18:56:41.177 回答
0

有几件事要添加到@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.
  });
});
于 2012-06-22T12:17:46.423 回答