【发布时间】:2013-04-08 04:58:52
【问题描述】:
情况:我从 API 获取 JSON 数组。 “div”来自我代码前面的 getElementByID。
问题:addEventListener 只附加到我列表中的最后一个元素。
for(var i = 0; i < JSONarray.response.artists.length; i++){
var artistName = JSONarray.response.artists[i];
div.innerHTML += "<h4 id=\"artist" + i + "\" accessKey=\"" + artistName.id + "\">Artist Name: " + artistName.name + "</h4>";
document.getElementById("artist" + i).addEventListener("click", moreInfo, false);
}
奇怪的事情:如果我将 addEventListener 放在它自己的 for 循环中(使用完全相同的循环脚本),它会非常高兴,并且我的所有列表项都会获得它们的侦听器。
问题:为什么我不能将所有内容都放在一个 for 循环中,或者这是我的代码?
注意:我正在使用 Chrome 来运行它,如果它碰巧是浏览器的话。
感谢您的宝贵时间!
【问题讨论】:
-
你确定没有匿名函数内联你引用
moreInfo吗? -
如果您不需要对点击事件进行任何特殊处理,只需使用 document.getElementById(...).onclick=moreInfo;或者只是内联 <... onclick="moreInfo('+i+')">
-
您的
moreInfo是如何定义的? -
哦,刚刚学习了innerHTML的多重替换。从来没有在 innerHTML 上使用过事件处理程序,所以从来没有遇到过这个问题。自从发现 jQuery 后,我永远不会使用自己的 Jason 处理。您是否考虑过 jQuery 可以极大地简化您的操作
标签: javascript arrays for-loop addeventlistener