0
<!doctype html>
<html>

<body>
<div id = 'div' style = 'width:100px;height:100px;background:#000000;'></div>
<script type = 'text/javascript'>
document.getElementById('div').addEventListener('click',happen(),true);
function happen()
{
    alert(1)
}
</script>
</body>
</html>

在上面的代码中,为什么在页面加载时触发事件而不是在我单击 div 时触发...这也是正确的事件名称 click 或 onclick ....

4

6 回答 6

3

您将立即调用该函数并将其返回值传递给addEventListener,就像任何其他函数调用一样。
取出().

于 2012-01-26T17:54:11.980 回答
3

这是因为您立即调用了该函数,并将其 null 结果传递给addEventListener().

它应该是:

document.getElementById('div').addEventListener('click',happen,true);

如果你想将参数传递给happen,你必须这样写:

document.getElementById('div').addEventListener('click', function() {
    happen(args_here, ...); 
}, true);
于 2012-01-26T17:54:32.320 回答
2

这应该有效:

document.getElementById('div').addEventListener('click',happen,true);
于 2012-01-26T17:54:23.833 回答
2

问题在于这一行:

document.getElementById('div').addEventListener('click',happen(),true);

您应该只传递函数的名称,happen但由于您添加了括号,因此您正在传递结果。

试试这个:

document.getElementById('div').addEventListener('click',happen,true);
于 2012-01-26T17:54:36.037 回答
0

正如其他回答者所说,取出 () 将解决问题。

OO Javascript 的另一种选择和良好实践是将函数包装在 afunction(){ }中,如下所示:

document.getElementById('div').addEventListener('click',function(){happen()},true);

如果回调需要在对象内执行(在这种情况下不需要),那将保留范围。

于 2012-01-26T18:00:10.787 回答
0

事件处理程序不需要括号

 document.getElementById('div1').addEventListener('click',happen,true);
于 2012-01-26T18:00:20.270 回答