2017-04-01 35 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>

相關問題