我有以下代碼。即使我沒有將函數設置爲onclick按鈕屬性,我仍然無法弄清楚爲什麼會發生點擊事件。函數「onclick」被稱爲即使它沒有設置在按鈕
var x = 0;
var onclick = function() {
console.log("x = " + ++x);
};
<button type="button" onclick="">Click</button>
我有以下代碼。即使我沒有將函數設置爲onclick按鈕屬性,我仍然無法弄清楚爲什麼會發生點擊事件。函數「onclick」被稱爲即使它沒有設置在按鈕
var x = 0;
var onclick = function() {
console.log("x = " + ++x);
};
<button type="button" onclick="">Click</button>
那麼你設置全局變量onclick
,轉化爲全局對象window
財產onclick
。這基本上是一樣的,如果你要直接設置它:
window.onclick = function() {
console.log("x = " + ++x);
};
而且因爲您設置了整個window
對象click事件,將火不僅按一下按鈕,但在你的文檔中點擊任何東西(除非事件傳播被停止)。
[* event.stopPropragation *](https://developer.mozilla.org/en/docs/Web/API/Event/stopPropagation)只會停止它通過偵聽器,它不會阻止它進入偵聽器(因爲它只能從偵聽器調用,所以它必須先到達偵聽器)。所以「* ...除非事件阻止事件被其他一些點擊監聽器事先阻止*」。 ;-) – RobG
即使用「var」「定義」它?這很好。我想我可能犯了與OP相同的錯誤! –
@MrLister那麼在這種情況下,我們在全局範圍內,所以'var'設置全局變量。如果這段代碼在函數內部,那麼它當然不會設置'window.onclick'。 – dfsq
正如@dfsq提到的那樣,當您做var onclick=
時,您正在創建window.onclick
。類似的說明:
var onerror = function() {
console.log("ERROR HAPPENED!");
};
<button type="button" onclick="ThisFunctionIsNotDefined()">Click</button>
我可以按下按鈕,但什麼也沒有發生。 – suleiman
@suleiman檢查您的瀏覽器的控制檯。 Barun var onclick與window.onclick相同。 – Ali