如何为javascript元素数组中的所有元素分配监听器?

时间:2012-02-25 03:35:12

标签: javascript arrays addeventlistener

基本上,我想知道的是我能做些什么,基本上就是这样:

document.getElementsByClassName('particle')[all].addEventListener('mouseover', Jump, false);

我已经尝试过使用for循环,它冻结了浏览器:

for(var i=0; i <= document.getElementsByClassName('particle').length, i+1){
  document.getElementsByClassName('particle')[i].addEventListener('mouseover', Jump, false);
}

为什么没有这个工作? 我该怎么做才能达到这个效果?

我也试过了:

document.getElementsByClassName('particle')[0,1,2,3,4].addEventListener('mouseover', Jump, false);

然而,这也没有奏效。 。 。它只适用于第一个和最后一个元素,但不适用于任何其他元素。

2 个答案:

答案 0 :(得分:3)

for循环是正确的方法。

for(var i=0; i <= document.getElementsByClassName('particle').length, i+1){

应该是

for (var i=0; i<document.getElementsByClassName('particle').length; i+=1) {

此外,如果您只查询一次DOM会更有效:

var particles = document.getElementsByClassName('particle');
for (var i=0; i<particles.length; i+=1) {
    particles[i].addEventListener('mouseover', Jump, false);
}

答案 1 :(得分:0)

<强>更新

for(var i=0; i <= document.getElementsByClassName('particle').length, i+1){

应该是

for(var i=0; i < document.getElementsByClassName('particle').length; i++){
                ^                                                  ^   ^

第一个错误:由于我从0开始,您应该使用<而不是<=
Seconde错误:,应为;
第三个错误:i应该在循环中重新分配值,因此它应该是i++而不是i+1

请注意,getElementsByClassName()不是available up to and including IE8

确保您的浏览器支持此方法。