Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中捕获事件 document.getElementById('div').addEventListener('click',appoint(),true); 函数发生() { 警报(1) }_Javascript_Events_Addeventlistener_Event Bubbling_Event Capturing - Fatal编程技术网

在javascript中捕获事件 document.getElementById('div').addEventListener('click',appoint(),true); 函数发生() { 警报(1) }

在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;'>&

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

您正在立即调用该函数,并将其返回值传递给
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);