jay*_*rjo 7 javascript garbage-collection dom-events
我总是想知道这种方法有多干净 - 从那个侦听器中删除一个事件监听器.
更新:
在内部我保留了对象和侦听器的哈希值,因此我可以从任何地方删除事件侦听器.我只关心从内部删除它.这样的行动会不会真的有效?
UPDATE
我问的是addEventListener,removeEventListener的东西.
bro*_*eib 27
您可以传递once选项让侦听器仅操作一次,然后自行删除。文档:https : //developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Parameters
例子:
element.addEventListener('eventname', (ev) => {
console.log("event is captured only once.");
// do more stuff...
}, { once: true });
Run Code Online (Sandbox Code Playgroud)
从上面的相同文档链接,现代浏览器支持很好,但不适用于 Internet Explorer。
bha*_*ral 10
我刚看到这个因为我想知道完全相同的问题!
arguments.callee是你的朋友......
所以你有
blah.addEventListener('click',function(e){
e.source.removeEventListener('click', arguments.callee);
blee bloo bleep
});
Run Code Online (Sandbox Code Playgroud)
这适用于Titanium Appcelerator,所以它也应该在javascript中工作(因为它们是同一件事)
()在这个例子中,NB不要添加到arguments.callee的末尾,除非你喜欢看... bah dum tish!.
事实上,如果你不想使用arguments.callee,这也可以工作(未经测试):
blah.addEventListener('click', anyThingYouWantHere : function(e){
e.source.removeEventListener('click', anyThingYouWantHere);
blee bloo bleep
});
Run Code Online (Sandbox Code Playgroud)
其中"anythingYouWantHere"是你想要的任何变量名称〜你在添加它时有效地"命名"了这个函数.
我刚刚制作了一个生成自毁事件侦听器的包装函数:
let addSelfDestructingEventListener = (element, eventType, callback) => {
let handler = () => {
callback();
element.removeEventListener(eventType, handler);
};
element.addEventListener(eventType, handler);
};
Run Code Online (Sandbox Code Playgroud)
到目前为止效果很好:)
您可以尝试这样的事情,具体取决于它的名称:
some_div.onclick = function () {
...
this.onclick = null;
// or: some_div.onclick = null;
};
Run Code Online (Sandbox Code Playgroud)
或者是您关心的事件侦听器?因为这些有点复杂。
| 归档时间: |
|
| 查看次数: |
8184 次 |
| 最近记录: |