Zacznę od stwierdzenia, że rozumiem, że poniższy kod ma poważny problem. W szczególności parametr event
nie jest przekazywany do funkcji. Nie rozumiem, dlaczego w poniższym kodzie Chrome, Opera, Safari, Firefox i IE wszystkie traktują zmienną event
inaczej.Nieoczekiwany dostęp do zmiennej "zdarzenia" w różnych przeglądarkach?
$('#eventBtn').on('click', function() {
console.log(event);
event.preventDefault();
});
W Chrome, Opera i Safari powyższy kod działa. IE kończy się niepowodzeniem na drugiej linii i Firefox natychmiast się zawiesza. Dla celów testowych stworzyłem nieco bardziej upiększony jsFiddle. Wyjście powyżej console.log(event)
w różnych przeglądarkach:
Chrome Version 26.0.1410.64 m
MouseEvent {dataTransfer: null, toElement: button#superBtn, fromElement: null, y: 20, x: 33…}Opera Version 12.15
MouseEventSafari Version 6.0.2 (8536.26.17)
MouseEventIE Version 10.0.9200.16540
[object MSEventObj]Firefox Version 20.0.1
ReferenceError: event is not defined
byłem trochę o tej „funkcji” w Chrome, Opera i Safari, ponieważ pracował zgodnie z przeznaczeniem nie jest tak zakodowany tworząc nieoczekiwane zachowanie w innych przeglądarkach. Chociaż IE ma również globalną zmienną event
, w przeciwieństwie do wyżej wymienionych przeglądarek nie przypisuje tej zmiennej do zdarzenia, które jest aktualnie uruchamiane. Firefox nie ma globalnej zmiennej event
iw związku z tym ulega awarii, gdy tylko odwołuje się event
.
Zazwyczaj używam e
do reprezentowania zmiennych zdarzeń, które zgodnie z oczekiwaniami zawiodą w ten sam sposób we wszystkich przeglądarkach. Dlaczego Chrome, Opera i Safari mają globalną zmienną event
przypisaną w ten sposób? Czy to zachowanie jest gdzieś udokumentowane? Oprócz tego, czy nie używasz event
dla zmiennej, nazywając jakąkolwiek radę do radzenia sobie z tą "cechą"?
Twoja funkcja nie bierze "zdarzenia" jako parametru, więc 'zdarzenie' nie powinno być zdefiniowane w kontekście funkcji. – nullability
możliwy duplikat [jest zdarzeniem globalna zmienna, która jest dostępna wszędzie wewnątrz łańcucha oddzwaniania?] (Http://stackoverflow.com/questions/6426497/is-event-a-global-variable-that-is-accessible-everywhere -inside-the-callback-cha) – Barmar
@nullability Taki jest sens jego pytania: nie spodziewał się, że zostanie on zdefiniowany, ale jest w większości przeglądarek. Zobacz pytanie, które właśnie podłączyłem dla wyjaśnienia. – Barmar