在每次迭代中以索引为参数的循环中添加EventListener

时间:2018-07-28 08:35:55

标签: javascript closures

使用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); };
}

1 个答案:

答案 0 :(得分:1)

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

th.addEventListener('click', sortFunction);