var thumbs = document.getElementsByTagName("img");
for (var i=0; i<thumbs.length; i++)
{
Core.addEventListener(thumbs[i], "click", function() {alert(i);});
}
在上面的代码中,警报始终显示18。这是图像缩略图的数量。我希望它显示我点击了哪个缩略图。为什么它不显示? 我还需要将点击的缩略图的值传递给另一个功能,以便我也可以显示后续的完整图像。 任何人都可以帮忙吗?
如果有更好的方法可以做到这一点,请建议。 非常感谢。
答案 0 :(得分:0)
这是因为内部匿名函数关闭变量i,因此它将始终显示迭代的最后一个值。你做下一步:
Core.addEventListener(thumbs[i], "click", (function( j)
{
return function()
{
alert(j);
};
})(i));
说明:
在你的代码迭代变量中,i是你为事件处理程序生成的内部匿名函数的全局变量,但是你必须注意,虽然看起来你创建了不同的匿名函数,但是所有这些函数都在看i全球范围,它对所有人来说仍然是一样的。因此,最后一个值将被警告,为了避免它,我为你创建了另一个包装器函数,以便将i的值包含在另一个范围内,这样对于不同的元素将看到不同的警报。评论中的解释也是正确的,我建议你google for Javascript关闭并阅读一些关于它的文章,一旦你知道它可能会成为非常强大的设备。