有人可以帮我处理以编程方式创建的 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);
  }
}