在javascript循环中添加.onclick侦听器

时间:2015-05-13 06:53:59

标签: javascript ajax javascript-events

我有一个页面通过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不是(也不可能是)我的强项 - 只是这样做,因为没有其他人做前端代码。这个问题与在循环中使用匿名函数有关吗?

1 个答案:

答案 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保留循环中最后一次迭代的值,并且对于所有事件处理程序都是相同的。