在javascript中捕获事件 document.getElementById('div').addEventListener('click',appoint(),true); 函数发生() { 警报(1) }
在上面的代码中,为什么在页面加载时触发事件,而在我单击div时不触发事件…这也是正确的事件名称click或onclick…您正在立即调用该函数,并将其返回值传递给在javascript中捕获事件 document.getElementById('div').addEventListener('click',appoint(),true); 函数发生() { 警报(1) },javascript,events,addeventlistener,event-bubbling,event-capturing,Javascript,Events,Addeventlistener,Event Bubbling,Event Capturing,在上面的代码中,为什么在页面加载时触发事件,而在我单击div时不触发事件…这也是正确的事件名称click或onclick…您正在立即调用该函数,并将其返回值传递给addEventListener,就像任何其他函数调用一样。 取出()这应该可以: <!doctype html> <html> <body> <div id = 'div' style = 'width:100px;height:100px;background:#000000;'>&
addEventListener
,就像任何其他函数调用一样。取出
()
这应该可以:
<!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>
这是因为您已立即调用该函数,并将其空结果传递给
addEventListener()
应该是:
document.getElementById('div').addEventListener('click',happen,true);
如果要将参数传递给发生
,则必须编写以下代码:
document.getElementById('div').addEventListener('click',happen,true);
这一行的问题在于:
document.getElementById('div').addEventListener('click', function() {
happen(args_here, ...);
}, true);
您应该只传递函数的名称occure
,但由于添加了括号,因此您正在传递结果
请尝试以下方法:
document.getElementById('div').addEventListener('click',happen(),true);
正如其他回答者所说,去掉()将解决问题 另一种方法,也是OO Javascript的一种良好实践,是将函数包装在
函数(){}
中,如下所示:
document.getElementById('div').addEventListener('click',function(){appoint()},true)代码>
如果回调需要在对象内执行(在本例中不需要),则它将保留作用域。事件处理程序不需要括号
document.getElementById('div').addEventListener('click',happen,true);
那么我如何传递function@JinuJD你必须用另一个匿名函数包装函数调用抱歉,我不明白…包装是什么意思…你能给我举个例子吗?嗯,除非你真的需要,否则引入一个新的作用域是不好的做法。是的,我通常需要它;)全局窗口对象越少越好。您的版本引入的“全局窗口对象”(我猜您实际上指的是“全局变量”)与编写occure
一样多。
document.getElementById('div1').addEventListener('click',happen,true);