我有一个以编程方式生成一组div的脚本,但我无法弄清楚如何让onclick事件独立地为每个div工作。
for (i = 0;i < allEntries.length;i++) {
//Build a div for this entry
var containerID = "dayTimeMinutesContainer-" + allEntries[i][10] + "-" + allEntries[i][6];
var contSubj = allEntries[i][4];
var divid = allEntries[i][12];
dojo.query(dojo.create("div",{id:divid},containerID))
.onclick(function(){alert(contSubj); //returns the last subject for all entries ???
});
}
如代码片段所示,onclick事件为每个创建的div触发 - 但它始终从循环中处理的最后一个条目返回Subject(contSubj),而不管单击的条目如何。
我是一名道场新秀,所以如果这似乎是一个简单的疏忽,我道歉。我花了几个小时寻求解决方案,但没有找到类似的东西。有人能指出我正确的方向吗?如何创建onclick事件以处理每个处理的个体?
答案 0 :(得分:0)
请直接在帖子中添加代码,而不是图像。
问题不在于此事件。它是变量contSubj
,它是罪魁祸首。在JavaScript中,变量是函数作用域。您已在单击回调函数的函数范围之外定义了contSubj
。所以它总是具有for循环的最后一项的值。
答案 1 :(得分:0)
解决方案......感谢您的回复...总是很高兴获得额外的见解。我使用了回调建议并解决了这个困境,如图所示。
for (i = 0;i < allEntries.length;i++) {
//Build a div for this entry
var containerID = "dayTimeMinutesContainer-" + allEntries[i][10] + "-" + allEntries[i][6];
var contSubj = allEntries[i][4];
var divid = allEntries[i][12];
dojo.query(dojo.create("div",{id:divid},containerID))
.onclick(createCallback(contSubj));
}
function createCallback( subj ){
return function(){
alert(subj);
}
}