JavaScript闭包函数传递给事件监听器
JavaScript closure function passing to event listener
抱歉,如果标题不完全准确,不知道如何描述它。我有这一点js我拼凑在一起使用各种其他教程。它正在工作,但我希望对它如何/为什么工作有更多的了解。
代码是一个模态在一个充满图像的页面,在那里你点击任何图像,它启动一个模态与该图像在其中。以下是代码的相关部分:
function modal(modalId, modalImg) {
var image = document.getElementsByClassName('modalImg');
var imageLength = image.length;
var myModal = document.getElementById(modalId);
var modalImg = document.getElementById(modalImg);
for (var i = 0; i < imageLength; i++) {
(function(index) {
image[i].onclick = function() {
myModal.style.display = "block";
modalImg.src = this.src;
imgIndex = index;
}
})(i);
}
}
你可以在这里看到这段代码的工作(以及在完整的上下文中)。
我在这里试图理解的部分涉及闭包函数和事件侦听器。所以闭包函数被调用,并且i
(for循环的计数器)作为index
参数被传递。我的问题是,怎么见鬼是i
被设置为被点击的图像的索引?
看下面的代码片段:
(function(index) {
image[i].onclick = function() {
myModal.style.display = "block";
modalImg.src = this.src;
// `index` here is a variable accessible through closure scope
imgIndex = index;
}
})(i);
代码遍历所有图像,并将每个图像索引作为i
变量传递,然后在click
回调中作为closure
捕获。
相关文章:
- 在下拉式javascript事件监听器中选择时触发事件
- 如何在音频元素上使用React媒体合成事件监听器
- Javascript事件监听器让我很困惑
- javascript的事件监听器将下拉列表转换为输入按钮
- 组合类和事件监听器:`this`关键字
- 将事件监听器添加到画布时出错
- 如何通过javascript触发事件监听器
- 通过事件监听器在circle的文本匹配id上修改circle元素
- 动态添加javascript事件监听器,做一些无法解释的事情
- 事件处理程序&事件监听器彼此独立
- 为什么我在谷歌闭包中编写的事件监听器不起作用
- 如何在JS中使用事件监听器
- 为什么jQuery选择事件监听器会多次触发
- 为什么不'我的手机上没有设备就绪的事件监听器
- 何时在 Cocos2d-js 3.2 中注销事件监听器和定时回调
- javaScript-我们如何将一个事件监听器设置为另一个事件监听器的从属
- 微信/微信JavaScript桥(WeixinJSBridge)使用微信JSBridgeReady事件监听器并函数作为参
- ExtJS拖拽事件监听器在Chrome和Firefox上的工作方式不同
- 在这段代码中,复制自雄辩javascript的ch15,keyup事件监听器做什么
- 向音频元素添加事件监听器;不起作用