循环中的Javascript函数

时间:2013-12-06 18:01:20

标签: javascript

任何人都知道为什么这不能按预期工作?只需在页面加载时触发警报。

var div = document.querySelectorAll('.div'); // NodeList of all instances of '.div'

var eventFunction = function() {
  alert('ggdf');
};


for(var i = 0; i < div.length; i++) { // Begin '.div' NodeList loop

  div[i].addEventListener('click', eventFunction(), false); // Click function on all instances of '.div'

} // End '.div' NodeList loop

2 个答案:

答案 0 :(得分:5)

将函数传递给eventListener函数时执行该函数,而不是使用:

for(var i = 0; i < div.length; i++) {  
  div[i].addEventListener('click', eventFunction, false); //notice no ()
}

函数可以作为参数以与其他变量相同的方式传递,但是当您使用()传递它们之后,调用函数并将函数返回的对象/值作为参数传递。

除非你为所有div添加了一个类div,否则我认为你想要使用标签选择器:

var div = document.querySelectorAll('div'); 

JS小提琴: http://jsfiddle.net/rG3AC/1/

答案 1 :(得分:0)

您需要绑定该函数,使其不会立即触发。

div[i].addEventListener('click', eventFunction.bind(), false);