首页 > 解决方案 > 在每次迭代中以索引作为参数的循环中添加 EventListener

问题描述

使用 JavaScript 创建表时,我试图在循环中设置事件侦听器。每次迭代中的事件侦听器应调用相同的函数,但将当前索引作为参数。我在这里发现我可以将闭包与函数数组一起使用,但我必须使用数组吗?我不明白为什么下面的代码不起作用?

function createTable(id, headers, keys, data, url) {
var table = document.createElement("TABLE");
var header = table.createTHead();
var tr = header.insertRow(0);
var i, j, td;
var headersLength = headers.length;
for (i = 0; i < headersLength; i++) {
    th = document.createElement('th');
    th.innerText = headers[i];
    tr.appendChild(th);
    var tbodyId = "t_body";
    var sortFunction = createSortFunction(tbodyId, i);
    th.addEventListener('click', function() {
        sortFunction;
    });
}

function createSortFunction(tbodyId, i) {
    return function() { alert(i); };
}

标签: javascriptclosures

解决方案


您不需要包装sortFunction函数,因为它包含一个可以直接传递给的函数addEventListener

th.addEventListener('click', sortFunction);

推荐阅读