首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >图片库循环JS

图片库循环JS
EN

Stack Overflow用户
提问于 2009-05-24 20:00:31
回答 1查看 430关注 0票数 0
代码语言:javascript
复制
    var thumbs = document.getElementsByTagName("img");
    for (var i=0; i<thumbs.length; i++)
    {
        Core.addEventListener(thumbs[i], "click",  function() {alert(i);});
    }

在上面的代码中,警报总是shows18。这是图像缩略图的数量。我想让它显示我点击了哪个缩略图。为什么它没有显示出来呢?此外,我还需要将单击的缩略图的值向前传递给另一个函数,以便我也可以显示后续的完整图像。有谁能帮上忙吗?

此外,如果有任何更好的方法,请建议。在此之前非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-05-24 20:15:35

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

代码语言:javascript
复制
Core.addEventListener(thumbs[i], "click",  (function( j) 
                                           { 
                                               return function() 
                                                      {
                                                         alert(j);
                                                      };
                                            })(i));

解释:

在你的代码迭代变量中,i是一种内部匿名函数的全局变量,它是你为事件处理程序生成的,但是你必须注意到,尽管看起来你创建了不同的匿名函数,但它们都在更全局的范围内查看i,它们仍然是相同的i。所以最后一个值将被警告,为了避免它,我为您创建了另一个包装函数,以便将i的值包含在另一个作用域中,以便对于不同的元素将看到不同的警告。评论中的解释也是正确的,我建议你去谷歌关闭Javascript,并阅读一些关于它的文章,一旦你有了一个想法,它可能会成为非常强大的设备。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/904540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档