javascript - JS onclick 无法正确触发

标签 javascript onclick

我有以下功能。问题在于,函数没有像预期的那样等待用户单击图像,而是立即为图像数组中的每个元素触发 imgReplace 函数。

我做错了什么吗? 我正在使用基于 Jquery 的单独 Javascript 例程这一事实与此相关吗?

function setup () {
    var images = document.getElementById("mycarousel");
    images = images.getElementsByTagName("img");

    for (var i = 0; i< images.length; i++) {
        images[i].onclick = imgReplace (images[i]);
    }

}

最佳答案

哇,我刚刚在我自己的一些代码中修复了这个令人尴尬的错误。其他人都弄错了:

images[i].onclick = function() {imgReplace(images[i]);};

不会工作。相反,它应该是:

images[i].onclick = (function(i) { return function() { imgReplace(images[i]); }; })(i);

Paul Alexander 的回答是正确的,但你不能通过引入另一个这样的局部变量来解决问题。 JavaScript block (如“for”循环中的 {} block )不会创建新的作用域,这是与 Java 或 C++ 的重大(且非显而易见的)区别。只有函数才能创建作用域(抛开一些新的 ES5 特性),所以这就是为什么上面介绍了另一个函数。循环中的“i”变量作为参数传递给匿名函数。 那个 函数返回实际 事件处理程序函数,但现在它引用的“i”将是外部函数作用域的不同参数。因此,每次循环迭代都会创建一个新的范围,专门用于“i”的单个值。

关于javascript - JS onclick 无法正确触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5667508/

相关文章:

javascript onclick 函数放大文本

javascript - 需要帮助使用 Javascript 将悬停更改为 OnClick

javascript - javascript内置函数中的循环检测

javascript - 有人可以帮我破译 YouTube 审查视频的签名吗

javascript - Require.js 问题加载谷歌地图和它的 Richmarker 扩展

javascript - 为什么 <td> onclick 事件在 ASP.NET 中没有触发?

javascript - 通过带有 jQ​​uery 的按钮跳到 HTML5 视频中的特定时间

javascript - Flowplayer 中的 MP4 视频无法在 Windows 7 Chrome 中播放

android - OSMDroid:onTap 示例

jQuery 在谷歌地图 v3 的信息窗口内的链接上看不到 onclick 事件