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

标签 javascript jquery arrays dom-events

我有一堆图像,应该一个接一个地分布在容器中,这意味着每个图像在上一个图像加载并显示后精确显示,并且每个图像都应该有一个事件监听器。
这是我的解决方案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);

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

最佳答案

一个更简单的解决方案是在循环中创建所有 img 元素,然后对它们使用单​​个委托(delegate)的单击事件处理程序。像这样的事情:

for (var i = 0; i < pics.length; i++) {
    $('<img />', {
        'src': pics[i],
        'class': 'sas',
        'data-id': i,
        'load': function() {
            var id = $(this).data('id');
            console.log(id + ' img loaded');
        }
    }).appendTo('#container')
}

$('#container img').click(function() {
    alert($(this).data('id'));
});

Updated fiddle

关于javascript - 以特定方式在图片数组上添加事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35672261/

相关文章:

javascript - 尝试使用映射将数组从 JSON 映射到淘汰赛

javascript - Wordpress 中的 Google Maps API Javascript

javascript - Jquery:Tipsy 不会显示在禁用的元素上

javascript - 在 jquery-ui 自动完成上设置自定义输入字段值

c - 通过引用传递数组的两种不同方式。哪一个更正确?

javascript - 如何找到具有值的数组索引?

javascript - 我的简单按钮有什么问题?

javascript - 使用 $ ('#dividname' ).text 将换行符插入 div

javascript - 如何将当前日期与javascript或jquery中的输入日期进行比较

arrays - 按 Int 数组对字符串数组进行排序