JavaScript在从数组中读取时未删除侦听器
JavaScript not removing listener when reading from array
下面我有一个小的JavaScript文件,用于为数组中的每个数组创建元素。除了最后一个函数removeEventListeners()
外,所有函数都运行良好。这个函数不会返回任何错误,但它不会删除侦听器。
非常感谢您的帮助!谢谢
var array = [["Bob", 17, 1], ["Alan", 16, 1], ["Dave", 19, 1], ["Terry", 5, 1], ["Janet", 23, 0]];
var elements = [];
var AGE = 1;
function createHandler(i) {
return function() {
// Upon clicking the element show an alert with the age of that element (taken from array)
alert(array[i][AGE]);
}
}
for (var i = 0; i < array.length; i++) {
elements[i] = document.createElement("div");
elements[i].addEventListener("click", createHandler(i), false);
}
// This function is where the problem lies - it doesn't remove the handlers
function removeEventListeners() {
for (var i = 0; i < elements.length; i++) {
elements[i].removeEventListener("click", createHandler(i), false);
}
}
原因是creatHandler
总是返回一个新函数,而不是您附加的那个函数。您应该存储处理程序,并在想要删除它们时获取它们。
var handlers = [];
function createHandler(i) {
if (!handlers[i]) {
console.log('Created ' + i);
handlers[i] = function () {
alert(array[i][AGE]);
};
}
return handlers[i];
}
你也可以在行动中看到:http://jsfiddle.net/balintbako/TQxua/
相关文章:
- javascript删除事件侦听器
- 如何在不删除类似侦听器的情况下从父对象中删除jQuery事件侦听器
- JavaScript删除未知侦听器
- 在离开页面之前删除事件侦听器
- 如何删除事件侦听器
- JS:删除带有接受参数的处理程序的事件侦听器
- Javascript:从数组中删除包含带有侦听器的对象的项目的最佳方法
- 我需要删除2016年的事件侦听器吗
- 使用jQuery代理时删除事件侦听器
- 不能使用删除事件侦听器
- 如何使用.bind(this)删除对象的事件侦听器
- 正在创建事件侦听器以从本地存储中删除对象
- 删除添加的事件侦听器
- 正在删除使用绑定添加的事件侦听器
- 在使用chrome.tabs.onUpdated.addListener后访问给定URL时删除侦听器
- 在 JavaScript 上添加/删除侦听器(垃圾收集器)
- 在地图标记上删除侦听器后添加侦听器
- JavaScript在从数组中读取时未删除侦听器
- 我似乎无法使用组件将卸载可靠地删除侦听器
- 从注入脚本中删除侦听器