在循环中绑定单击事件处理程序导致jQuery中的问题

Kel*_*Kel 4 jquery closures loops onclick

我试图运行以下代码:

我将参数传递给函数,但它始终具有通过循环运行的最后一个对象的值.我在stackoverflow上读了一些关于它的文章,但我无法找到如何在我的解决方案中运行它.

该对象是从服务器返回的JSON对象.它的所有价值都是正确的.

for(var i = 0;i<parents.length;i++){
            var row        = $(document.createElement("tr"));
            var colName    = $(document.createElement("td"));

            var aDisplayCol = $(document.createElement("a"));

            var parentId = parents[i]['PARENT_ID'];

            aDisplayCol.attr("href","#").html(parents[i]['NAME']);
            aDisplayCol.bind('click',function(){ alert(parentId);});


            colName.append(aDisplayCol);

            row.append(colName);
            $('#pages tbody').append(row);                
Run Code Online (Sandbox Code Playgroud)

}

谢谢

小智 8

这是一个范围问题.到执行事件处理函数时,值parentId已更改,并且不再是您所期望的值.

这可以通过另一个函数返回原始事件处理函数来解决,而另一个函数又传递了parentIdas参数的值:

function getEventHandlerFunction(id){
    return function() {
        alert(id);  // variable found in the closure with the expected value
    };
}


aDisplayCol.bind('click', getEventHandlerFunction(parentId));
Run Code Online (Sandbox Code Playgroud)