我有一个页面通过AJAX获取JSON数据。我已经设法解析数据并从中创建表行。我现在正尝试使用以下代码将.onclick侦听器添加到这些行:
function addResultsRows(tbody, jsonResults) {
for (var i in jsonResults) {
var tableRow = tbody.insertRow(0);
var currRow = jsonResults[i];
tableRow.onclick = (function () {
window.location = '/otherscript?cusnum=' + currRow['cusnum'];
});
var currCell = tableRow.insertCell(0);
currCell.innerHTML = currRow['cusnum'];
}
}
等
我遇到的问题是所有行都以监听器函数结束,这些函数使用添加到表中的LAST行中的currRow ['cusnum']值。
Javascript不是(也不可能是)我的强项 - 只是这样做,因为没有其他人做前端代码。这个问题与在循环中使用匿名函数有关吗?
答案 0 :(得分:1)
可能是像
这样的改变function addResultsRows(tbody, jsonResults) {
for (var i in jsonResults) {
(function (i) {
var tableRow = tbody.insertRow(0);
var currRow = jsonResults[i];
tableRow.onclick = (function() { window.location = '/otherscript?cusnum=' + currRow['cusnum'] });
var currCell = tableRow.insertCell(0);
currCell.innerHTML = currRow['cusnum'];
})(i);
}
}
会起作用。
在脚本中,i
保留循环中最后一次迭代的值,并且对于所有事件处理程序都是相同的。