function AddTableHeader(table, cells, newOrderby) {
var head = table.createTHead();
var row = head.insertRow(0);
row.className = "SupplierDataTableTr";
for (var s in cells) {
var cell = null;
cell = document.createElement("th");
cell.innerHTML = cells[s];
cell.className = "SupplierDataTableTh";
if (newOrderby != null && newOrderby[s] != null) {
var ob = newOrderby[s];
cell.onclick = function() { SetOrderBy(ob); AutoComplete(null, 'txtSearch'); };
cell.style.cursor = "pointer";
}
row.appendChild(cell);
}
}
在if语句中我在数组中设置变量ob = string ..此时数组包含“SupplierNr”,“Name”,“Email”,“Phone”并且与单元格数组具有相同的顺序
问题是,最后每个<th>
标记上的事件都附加了最后一个newOrderby字符串,即“Phone”。我在调试器中循环遍历此部分,并为循环中的每个事件设置不同的orderby字符串,但由于某种原因,所有<th>
元素都会创建最后一个eventhandler。为什么是这样?单元格是在for循环中创建的,应该是本地的,它们与彼此没有任何关系。
任何人都知道我在这里做错了什么?
答案 0 :(得分:1)
如果您在循环中分配事件处理程序,那么您可能需要使用闭包来确保它正常工作。否则你会遇到你正在描述的问题。
此处类似的问题和解决方案:Event handlers inside a Javascript loop - need a closure?