我已經使用.on()綁定了Dojo中的keydown事件。事件發生後,我需要解除事件,似乎沒有任何工作。他們的文檔說事件返回了一個具有.remove()方法的對象,但是我不能在我的生活中找出如何訪問或應用此方法。通過Dojo解除事件
任何幫助將不勝感激。
謝謝!
query('#video-topics-input').on('keydown',function(e){
topicsDrop.keyDownFunc(e, e.keyCode);
});
我已經使用.on()綁定了Dojo中的keydown事件。事件發生後,我需要解除事件,似乎沒有任何工作。他們的文檔說事件返回了一個具有.remove()方法的對象,但是我不能在我的生活中找出如何訪問或應用此方法。通過Dojo解除事件
任何幫助將不勝感激。
謝謝!
query('#video-topics-input').on('keydown',function(e){
topicsDrop.keyDownFunc(e, e.keyCode);
});
dojo.on返回一個具有上述.remove函數來解除綁定偵聽器的事件句柄。在你的情況下,你需要使用鏈接的dojo.query,它在dojo.NodeList上運行。
這基本上意味着你必須從數組的角度思考,你的上面的例子將返回一個數組與一個條目 - 因爲選擇器是一個ID。
要綁定事件偵聽:
var eventHandles = query('#video-topics-input').on('keydown',function(e){
topicsDrop.keyDownFunc(e, e.keyCode);
});
而取消綁定這些:
eventHandles.forEach(function(handle) { handle.remove() });
更有效的方法是不使用查詢查找byId雖然
幾件事情添加到@ mschr的回答
正如他所提到的,如果您正在查找我d你應該使用dojo/dom
的byid
函數,它返回一個單獨的domNode。如果你這樣做,你也可以利用dojo/on
的once
功能does exactly what it says - 它觸發一次事件處理程序然後斷開連接。
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.
});
});
是的,我是一個道場新手...我最終做了上面的例子使用dom.byId來選擇元素。謝謝。 – user699242
謝謝!正是我想達到的。 – mtchuente
很高興能成爲幫助,仍然:)實際上,我通常有一個'onload'和'onunload'功能,一個ctor/dtor模式到我的對象/頁面。這種方式可以消除ajax應用程序中的內存泄漏 – mschr