javascript - 在每次迭代中以索引作为参数的循环中添加 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); };
}
解决方案
您不需要包装sortFunction
函数,因为它包含一个可以直接传递给的函数addEventListener
th.addEventListener('click', sortFunction);
推荐阅读
- javascript - 带有 jQuery 语法变量的 eval() 方法不起作用
- python - 如何规避使用 pandas 过滤 txt 文档,其中行包含字符串、整数和浮点数
- google-data-studio - 如何在 Data Studio 上为时间 (hhmm) 间隔创建过滤器
- ckeditor - CKEditor4 提到输出模板未在所见即所得编辑器中输出整个模板化字符串并作为新插入
标签而不是内联
- mysql - 数据导入mysql表后显示异常
- python - tqdm 加载条错误
- mysql - 显示所有计数大于1的表记录
- c# - 单例返回 null(仅限 iOS Xamarin AppStore 版本)
- javascript - 更改 JavaScript 中的 HTML 属性
- javascript - 在 Web 应用程序中导入成本理解