有人可以通过编程方式帮助我创建onclick事件吗?

时间:2017-03-30 16:10:55

标签: onclick dojo

我有一个以编程方式生成一组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  ???
        });
}

如代码片段所示,onclick事件为每个创建的div触发 - 但它始终从循环中处理的最后一个条目返回Subject(contSubj),而不管单击的条目如何。

我是一名道场新秀,所以如果这似乎是一个简单的疏忽,我道歉。我花了几个小时寻求解决方案,但没有找到类似的东西。有人能指出我正确的方向吗?如何创建onclick事件以处理每个处理的个体?

2 个答案:

答案 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);
  }
}