2017-04-01 9 views
6

Mam następujący kod. Nie byłem w stanie dowiedzieć się, dlaczego występuje zdarzenie kliknięcia, mimo że nie ustawiłem funkcji atrybutu onclick przycisku.funkcja "onclick" jest wywoływana, mimo że nie jest ustawiona w przycisku

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

+0

mogę nacisnąć przycisk, ale nic się nie dzieje. – suleiman

+0

@suleiman Sprawdź konsolę przeglądarki. Barun var onclick samo jak window.onkliknij. – Ali

Odpowiedz

8

Dobrze ustawić zmienną globalną onclick, co przekłada się do globalnego obiektu window własności onclick. To jest w zasadzie taka sama jak gdybyś ustawić go bezpośrednio:

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

A ponieważ zostało ustawione zdarzenie click na całym window obiektu, to ogień nie tylko na kliknięcia przycisku, ale po kliknięciu na cokolwiek w dokumencie (chyba że propagacja zdarzenia zostanie zatrzymana).

+0

[* event.stopPropragation *] (https://developer.mozilla.org/en/docs/Web/API/Event/stopPropagation) tylko zatrzymuje przechodzenie obok słuchacza, nie zatrzymuje go przed dotarciem do słuchacza (ponieważ można go wywołać tylko ze słuchacza, musi najpierw dotrzeć do słuchacza). Tak więc "* ... chyba że propragacja zdarzenia zostanie wcześniej zatrzymana przez innego słuchacza kliknięcia *". ;-) – RobG

+1

Nawet jeśli "zdefiniujesz" to za pomocą 'var'? Dobrze wiedzieć. Myślę, że mogłem popełnić ten sam błąd co OP! –

+0

@MrLister Cóż, w tym przypadku mamy zasięg globalny, więc 'var' ustawia zmienną globalną. Jeśli ten kod byłby wewnątrz funkcji, to oczywiście nie ustawiłby 'window.onclick'. – dfsq

0

Jak wspomniałeś @dfsq, tworzysz window.onclick, gdy robisz var onclick=. W podobnym tonie:

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

Powiązane problemy