【发布时间】:2016-02-27 16:28:17
【问题描述】:
我有一堆图像,应该一个一个地分布在容器中,这意味着每个图像都在前一个图像加载和显示后准确显示,每个图像都应该有一个事件监听器。
这是我的解决方案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);
看起来很简单,但有一个问题——事件监听器只为最后一个元素定义。
【问题讨论】:
-
您可以尝试为元素设置onclick属性,这会将变量存储在属性
onclick中。
标签: javascript jquery arrays dom-events