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)