有人可以帮我处理以编程方式创建的 onclick 事件吗?
Can someone help me with onclick events created programmatically?
我有一个脚本以编程方式生成一组 div,但我不知道如何让 onclick 事件独立地为每个 div 工作。
sample code snippet
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 ???
});
}
如代码片段所示,每个 div 创建时都会触发 onclick 事件 - 但它总是 returns 来自循环中处理的最后一个条目的主题 (contSubj),无论单击条目。
我是道场菜鸟,如果这似乎是一个简单的疏忽,我深表歉意。我花了几个小时寻求解决方案,但没有找到类似的东西。有人能指出我正确的方向吗?我如何创建 onclick 事件来处理每个 individual divid 处理?
请直接在 post 中添加代码,而不是图片。
问题不在于活动。变量 contSubj
是罪魁祸首。在 JavaScript 中,变量是函数范围的。您在单击回调函数的函数范围之外定义了 contSubj
。所以它总是有for循环最后一项的值。
解决方案...感谢您的回复...获得更多见解总是好的。我使用了回调建议并解决了这个难题,如图所示。
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);
}
}
我有一个脚本以编程方式生成一组 div,但我不知道如何让 onclick 事件独立地为每个 div 工作。
sample code snippet
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 ???
});
}
如代码片段所示,每个 div 创建时都会触发 onclick 事件 - 但它总是 returns 来自循环中处理的最后一个条目的主题 (contSubj),无论单击条目。
我是道场菜鸟,如果这似乎是一个简单的疏忽,我深表歉意。我花了几个小时寻求解决方案,但没有找到类似的东西。有人能指出我正确的方向吗?我如何创建 onclick 事件来处理每个 individual divid 处理?
请直接在 post 中添加代码,而不是图片。
问题不在于活动。变量 contSubj
是罪魁祸首。在 JavaScript 中,变量是函数范围的。您在单击回调函数的函数范围之外定义了 contSubj
。所以它总是有for循环最后一项的值。
解决方案...感谢您的回复...获得更多见解总是好的。我使用了回调建议并解决了这个难题,如图所示。
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);
}
}