Events 用Dojo解除事件绑定
我已经使用.on()在Dojo中绑定了一个keydown事件。事件触发后,我需要解除事件绑定,但似乎没有任何效果。他们的文档说,该事件返回一个具有.remove()方法的对象,但我一辈子都不知道如何访问或应用该方法 任何帮助都将不胜感激 谢谢Events 用Dojo解除事件绑定,events,binding,dojo,Events,Binding,Dojo,我已经使用.on()在Dojo中绑定了一个keydown事件。事件触发后,我需要解除事件绑定,但似乎没有任何效果。他们的文档说,该事件返回一个具有.remove()方法的对象,但我一辈子都不知道如何访问或应用该方法 任何帮助都将不胜感激 谢谢 query('#video-topics-input').on('keydown',function(e){ topicsDrop.keyDownFunc(e, e.keyCode); }); dojo.on返回一个事件句
query('#video-topics-input').on('keydown',function(e){
topicsDrop.keyDownFunc(e, e.keyCode);
});
dojo.on返回一个事件句柄,该句柄具有said.remove函数以解除侦听器的绑定。但是,在您的示例中,您使用的是在dojo.NodeList上操作的链式dojo.query 这基本上意味着您必须考虑数组,上面的示例将返回一个带有一个条目的数组,因为选择器是一个ID 要绑定eventlistener,请执行以下操作:
var eventHandles = query('#video-topics-input').on('keydown',function(e){
topicsDrop.keyDownFunc(e, e.keyCode);
});
要解开这些标签:
eventHandles.forEach(function(handle) { handle.remove() });
一种更有效的方法是不使用query来查找byId,尽管dojo.on返回一个事件句柄,该事件句柄具有said.remove函数来解除侦听器的绑定。但是,在您的示例中,您使用的是在dojo.NodeList上操作的链式dojo.query 这基本上意味着您必须考虑数组,上面的示例将返回一个带有一个条目的数组,因为选择器是一个ID 要绑定eventlistener,请执行以下操作:
var eventHandles = query('#video-topics-input').on('keydown',function(e){
topicsDrop.keyDownFunc(e, e.keyCode);
});
要解开这些标签:
eventHandles.forEach(function(handle) { handle.remove() });
一种更有效的方法是不使用query来查找byId,尽管@mschr的答案中需要添加一些内容 正如他所提到的,如果您是通过id查找的,那么您可能应该使用
dojo/dom
的byid
函数,该函数返回单个domNode。如果这样做,还可以利用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.
});
});
@mschr的答案中有几点需要补充 正如他所提到的,如果您是通过id查找的,那么您可能应该使用
dojo/dom
的byid
函数,该函数返回单个domNode。如果这样做,还可以利用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.
});
});
是的,我是一个Dojo新手……最后我使用dom.byId来选择元素,完成了上面的示例。谢谢,谢谢!这正是我想要实现的。很高兴能帮上忙:)实际上我通常有“onload”和“onunload”功能,有点像我的对象/页面的ctor/dtor模式。通过这种方式可以消除ajax应用程序中的memoryleakages是的,我是一个Dojo新手……我最终使用dom.byId来选择元素,完成了上面的示例。谢谢,谢谢!这正是我想要实现的。很高兴能帮上忙:)实际上我通常有“onload”和“onunload”功能,有点像我的对象/页面的ctor/dtor模式。这样可以消除ajax应用程序中的内存泄漏