2017-04-01 32 views
6

我有以下代码。即使我没有将函数设置为onclick按钮属性,我仍然无法弄清楚为什么会发生点击事件。函数“onclick”被称为即使它没有设置在按钮

var x = 0; 
 
var onclick = function() { 
 
    console.log("x = " + ++x); 
 
};
<button type="button" onclick="">Click</button>

+0

我可以按下按钮,但什么也没有发生。 – suleiman

+0

@suleiman检查您的浏览器的控制台。 Barun var onclick与window.onclick相同。 – Ali

回答

8

那么你设置全局变量onclick,转化为全局对象window财产onclick。这基本上是一样的,如果你要直接设置它:

window.onclick = function() { 
    console.log("x = " + ++x); 
}; 

而且因为您设置了整个window对象click事件,将火不仅按一下按钮,但在你的文档中点击任何东西(除非事件传播被停止)。

+0

[* event.stopPropragation *](https://developer.mozilla.org/en/docs/Web/API/Event/stopPropagation)只会停止它通过侦听器,它不会阻止它进入侦听器(因为它只能从侦听器调用,所以它必须先到达侦听器)。所以“* ...除非事件阻止事件被其他一些点击监听器事先阻止*”。 ;-) – RobG

+1

即使用“var”“定义”它?这很好。我想我可能犯了与OP相同的错误! –

+0

@MrLister那么在这种情况下,我们在全局范围内,所以'var'设置全局变量。如果这段代码在函数内部,那么它当然不会设置'window.onclick'。 – dfsq

0

正如@dfsq提到的那样,当您做var onclick=时,您正在创建window.onclick。类似的说明:

var onerror = function() { 
 
    console.log("ERROR HAPPENED!"); 
 
};
<button type="button" onclick="ThisFunctionIsNotDefined()">Click</button>

相关问题