使用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); };
}
答案 0 :(得分:1)
您不需要将sortFunction
包装在函数中,因为它包含可以直接传递给addEventListener
的函数
th.addEventListener('click', sortFunction);