JavaScript在从数组中读取时未删除侦听器

JavaScript not removing listener when reading from array

本文关键字:删除 侦听器 读取 数组 JavaScript      更新时间:2023-09-26

下面我有一个小的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/