使用Dojo解除事件绑定

时间:2012-06-21 18:39:58

标签: events binding dojo

我使用.on()来绑定Dojo中的keydown事件。事件发生后,我需要取消绑定事件,似乎没有任何工作。他们的文档说该事件返回一个具有.remove()方法的对象,但我不能在我的生活中找出如何访问或应用此方法。

非常感谢任何帮助。

谢谢!

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

2 个答案:

答案 0 :(得分:3)

dojo.on返回一个事件句柄,该句柄具有所述.remove函数以取消绑定侦听器。但是,在你的情况下,你使用链接的dojo.query,它在dojo.NodeList上运行。

这基本上意味着您必须考虑数组,上面的示例将返回一个带有一个条目的数组 - 因为选择器是一个ID。

绑定eventlistener:

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

解开这些:

eventHandles.forEach(function(handle) { handle.remove() });

更有效的方法是不使用查询来查看byId

答案 1 :(得分:0)

要添加到@mschr的答案中的几件事

正如他所提到的,如果你通过id查找,你应该使用dojo/dom的{​​{1}}函数返回一个domNode。如果你这样做,你也可以利用byid的{​​{1}}函数does exactly what it says - 它会触发事件处理程序一次然后断开它。

dojo/on