如何监听所有数组项
How do I listen on all array items?
我正在收集来自文档var listen = document.getElementsByTagName('img');
的所有图像元素,这导致了一个数组。现在我必须指定listen[0]
、listen[1]
、listen[2]
、listen[3]
等来监听来自该数组的元素上的事件。问题是,是否有任何方法只是做一些像listen[any item from this array]
,或一个函数。只是不需要手动指定要监听的每个元素。
现在我必须这样做,对于每个数组项:listen[3].click = function() {};
根据您想要的内容和DOM的外观,您可能希望在DOM树的某个位置使用事件侦听器,而不是创建大量侦听器:
document.addEventListener('click', function(e) {
if (e.target.nodeName !== 'IMG') {
return;
}
alert('img clicked');
});
演示:http://jsfiddle.net/APSMT/1/
注意,我已经将事件侦听器附加到document
,但是如果您可以使其更具体,您应该
对于一个合理的新浏览器,您可以使用Array.forEach:
[].forEach.call(document.getElementsByTagName('img'), function (img) {
el.addEventListener('click', callback);
});
或者"old skool"(也许更好读):
var imgs = document.getElementsByTagName('img');
for (var i = 0, len = imgs.length; i < len; ++i) {
imgs[i].addEventListener('click', callback);
}
只读取一次HTMLCollection.length
可以加速。它永远不会变慢。
你不应该为每次迭代创建一个Function对象:
// Don't
for (...) {
img[i].onclick = function () { ... }
}
// Do
function onclick () {
// `this` will be img[i]
}
for (...) {
img[i].onclick = onclick;
}
相关文章:
- 如何在映射数组中添加换行符
- javascript结合了数组和字典
- 需要帮助设置json数组
- 不能从angular2中的子组件指定父组件中的数组
- 使用JS将数组转换为json对象
- 数组在递归方法中设置为null
- Javascript:从数组中删除包含带有侦听器的对象的项目的最佳方法
- 如何在地图框中的层数组中循环以侦听单击事件
- 构建数组侦听器
- 为什么这个事件侦听器在 javascript 中的数组中对多个键不起作用
- 努力将事件侦听器添加到数组或节点列表
- 基于数组的动态侦听器
- 主干模型数组属性更改和更改事件侦听器不总是启动
- JavaScript在从数组中读取时未删除侦听器
- Javascript-添加事件侦听器时未定义的数组元素
- js中拖放图像的数组事件侦听器
- 如何监听所有数组项
- 如何通过侦听器引用数组中的当前dom元素来更改活动
- “undefined"不是检查表数组上的函数设置侦听器
- 当我使用数组时,kineticjs 鼠标事件不会侦听