图库画廊循环JS

时间:2009-05-24 20:00:31

标签: javascript dom

    var thumbs = document.getElementsByTagName("img");
    for (var i=0; i<thumbs.length; i++)
    {
        Core.addEventListener(thumbs[i], "click",  function() {alert(i);});
    }

在上面的代码中,警报始终显示18。这是图像缩略图的数量。我希望它显示我点击了哪个缩略图。为什么它不显示? 我还需要将点击的缩略图的值传递给另一个功能,以便我也可以显示后续的完整图像。 任何人都可以帮忙吗?

如果有更好的方法可以做到这一点,请建议。 非常感谢。

1 个答案:

答案 0 :(得分:0)

这是因为内部匿名函数关闭变量i,因此它将始终显示迭代的最后一个值。你做下一步:

Core.addEventListener(thumbs[i], "click",  (function( j) 
                                           { 
                                               return function() 
                                                      {
                                                         alert(j);
                                                      };
                                            })(i));

说明:

在你的代码迭代变量中,i是你为事件处理程序生成的内部匿名函数的全局变量,但是你必须注意,虽然看起来你创建了不同的匿名函数,但是所有这些函数都在看i全球范围,它对所有人来说仍然是一样的。因此,最后一个值将被警告,为了避免它,我为你创建了另一个包装器函数,以便将i的值包含在另一个范围内,这样对于不同的元素将看到不同的警报。评论中的解释也是正确的,我建议你google for Javascript关闭并阅读一些关于它的文章,一旦你知道它可能会成为非常强大的设备。