以特定方式在图片数组上添加事件侦听器

mister_potato

我有一堆图像,这些图像应一个一个地分布在容器中,这意味着每个图像在加载并显示了前一个图像之后都显示准确,并且每个图像都应该有一个事件侦听器。
这是我的解决方案https://jsfiddle.net/e2sfzn1u/4/
我曾经Image.onload将图像节点添加到标记中并定义了该节点的事件侦听器,当这些节点准备就绪时,它将转到另一个图像(递归) 。

var pics = [
   'http://i.imgur.com/1oT2ZpOb.jpg',
   'http://i.imgur.com/XsViuLib.jpg',
   'http://i.imgur.com/aTDTI8Eb.jpg',
   'http://i.imgur.com/4kLvWOdb.jpg'
]
var cont = document.getElementById('container');
var each = function(arr, i) {
   if (i === undefined) {
      i = 0;
   }
   if (i < arr.length) {
      var img = new Image();
      img.onload = function() {
         cont.innerHTML += '<div class="sas" id="' + i + '" ></div>';
         var pic = document.getElementById(i);
         pic.appendChild(img);
         pic.addEventListener('click', function() {
            alert('mda')
         });
         each(arr, i + 1);
      };
      img.src = arr[i];
   }
};
each(pics);

看起来很简单,但是有一个问题-事件侦听器仅为最后一个元素定义。

mister_potato

终于我来到了解决方案
问题在这里

cont.innerHTML += '<div class="sas" id="' + i + '" ></div>';

我试图以某种方式使其像@RoryMcCrossan建议的那样-我以正确的方式创建了div元素

//cont.innerHTML += '<div id="' + i + '"></div>';
var div = cont.appendChild(document.createElement('div'))
div.setAttribute('id', i);
div.setAttribute('class','sas');
var pic = document.getElementById(i);
pic.appendChild(img)
div.addEventListener('click', function () {
   alert('mda')
});

我唯一的解释是Element.innerHTML的速度比按节点添加元素的速度慢得多,因此我想为所有人类提供大量建议-永远不要使用硬编码innerHTML来操作DOM。谢谢

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

向推入数组的 DOM 元素添加事件侦听器

在动态创建的元素上添加事件侦听器

在替换的HTML DOM上添加事件侦听器

数组元素上的简洁事件侦听器

Javascript事件侦听器和数组

画布在事件侦听器上消失

以编程方式将单个事件侦听器添加到多个 div 会导致所有受影响的 div 上出现相同的函数

如何将事件侦听器添加到 Map 标记 [] 数组

Javascript-添加事件侦听器时未定义的数组元素

遍历数组并将事件侦听器“单击”添加到每个

JavaScript-将事件侦听器添加到对象数组

如何将事件侦听器添加到数组中的每个元素?

使用键值对数组遍历多个按钮以添加带有循环的事件侦听器

为检测特定按键的整个文档添加事件侦听器

使用raycaster选择gltf的特定元素并添加事件侦听器

在 Three.js 中为 3D 对象的特定部分添加事件侦听器

使用添加事件侦听器创建滚动事件 - Javascript

在事件触发后添加事件侦听器“加载”

如何将事件侦听器添加到画布上绘制的矩形?

在对象属性访问/读取上添加事件侦听器

在 WKWebView 上添加单击事件侦听器不起作用

在d3图表上按节点级别添加事件侦听器

如何在尚未在 DOM [no-jQuery] 中的元素上添加事件侦听器?

在socket.io上添加事件侦听器以节省资源的最佳方法

在Google Map API v3和MarkerWithLabel上添加多个事件侦听器

如何使用 redux-observable 在 dom 元素上添加事件侦听器

Vanilla Javascript 如何覆盖事件侦听器上的添加功能?

如何向 React 组件添加事件侦听器?

将事件侦听器添加到绘制的对象