var thumbs = document.getElementsByTagName("img");
for (var i=0; i<thumbs.length; i++)
{
Core.addEventListener(thumbs[i], "click", function() {alert(i);});
}在上面的代码中,警报总是shows18。这是图像缩略图的数量。我想让它显示我点击了哪个缩略图。为什么它没有显示出来呢?此外,我还需要将单击的缩略图的值向前传递给另一个函数,以便我也可以显示后续的完整图像。有谁能帮上忙吗?
此外,如果有任何更好的方法,请建议。在此之前非常感谢。
发布于 2009-05-24 20:15:35
这是因为内部匿名函数关闭了变量i,因此它将始终显示迭代的最后一个值。您接下来要做的是:
Core.addEventListener(thumbs[i], "click", (function( j)
{
return function()
{
alert(j);
};
})(i));解释:
在你的代码迭代变量中,i是一种内部匿名函数的全局变量,它是你为事件处理程序生成的,但是你必须注意到,尽管看起来你创建了不同的匿名函数,但它们都在更全局的范围内查看i,它们仍然是相同的i。所以最后一个值将被警告,为了避免它,我为您创建了另一个包装函数,以便将i的值包含在另一个作用域中,以便对于不同的元素将看到不同的警告。评论中的解释也是正确的,我建议你去谷歌关闭Javascript,并阅读一些关于它的文章,一旦你有了一个想法,它可能会成为非常强大的设备。
https://stackoverflow.com/questions/904540
复制相似问题