Rozważ następujące:
<div onclick="alert('you clicked the header')" class="header">
<span onclick="alert('you clicked inside the header');">something inside the header</span>
</div>
Jak mogę to zrobić, aby kliknięcie zakresu przez użytkownika nie uruchamiało div
zdarzenia kliknięcia?
javascript
html
events
dom
Sam
źródło
źródło
event
Wydaje się, że jest dostępny również podczas wydarzeń wbudowanych w IOS Safari.Istnieją dwa sposoby uzyskania obiektu zdarzenia z wnętrza funkcji:
Jeśli potrzebujesz obsługi starszych przeglądarek, które nie postępują zgodnie z zaleceniami W3C, zazwyczaj wewnątrz funkcji możesz użyć czegoś takiego:
które sprawdzą najpierw jedną, a potem drugą i zapiszą dowolną znalezioną w zmiennej zdarzenia. Jednak w wbudowanym module obsługi zdarzeń nie ma
e
obiektu do użycia. W takim przypadku musisz skorzystać zarguments
kolekcji, która jest zawsze dostępna i odnosi się do pełnego zestawu argumentów przekazanych do funkcji:Jednak ogólnie rzecz biorąc, powinieneś unikać wbudowanych procedur obsługi zdarzeń, jeśli potrzebujesz skomplikowanych czynności, takich jak zatrzymanie propagacji. Osobne pisanie programów obsługi zdarzeń i dołączanie ich do elementów jest znacznie lepszym pomysłem w perspektywie średnio- i długoterminowej, zarówno pod względem czytelności, jak i łatwości konserwacji.
źródło
onclick="foo(event)"
a następnie w funkcjifunction foo(event){/* do stuff with event */}
. Działa to zarówno w modelach zdarzeń IE, jak i W3C.Należy pamiętać, że window.event nie jest obsługiwany w FireFox, a zatem musi być coś w stylu:
Lub możesz użyć standardu W3C dla FireFox:
Jeśli chcesz się podoba, możesz to zrobić:
źródło
<div onclick="myEventHandler(event);">
e.cancelBubble
zwraca false w IE! Nie może dojść doe.cancelBubble = true;
instrukcji. Zamiast tego użyj warunku SoftwareARM !!Użyj tej funkcji, aby sprawdzić, czy istnieje poprawna metoda.
źródło
Miałem ten sam problem - pole błędu js w IE - działa tak dobrze we wszystkich przeglądarkach, o ile widzę (event.cancelBubble = true wykonuje pracę w IE)
źródło
To zadziałało dla mnie
źródło
W przypadku stron internetowych ASP.NET (nie MVC) można użyć
Sys.UI.DomEvent
obiektu jako opakowania zdarzenia natywnego.lub przekazać zdarzenie jako parametr do funkcji wewnętrznej:
oraz w niektórych funkcjach:
źródło
Zgodnie z tą stroną w IE potrzebujesz:
event.cancelBubble = true
źródło
Nie mogę komentować z powodu Karmy, więc piszę to jako całą odpowiedź: Zgodnie z odpowiedzią Garetha (var e = argumenty [0] || window.event; [...]) Użyłem tego onelinera w wierszu po kliknięciu szybki hack:
Wiem, że jest późno, ale chciałem poinformować, że działa to w jednej linii. Nawiasy klamrowe zwracają zdarzenie, które ma w obu przypadkach funkcję stopPropagation, więc próbowałem zamknąć je w nawiasy klamrowe, jak w przypadku if i .... to działa. :)
źródło
Działa to również - w linku HTML użyj onclick ze zwrotem w następujący sposób:
A potem funkcja comfirmClick () powinna wyglądać następująco:
źródło
confirm
nie jest istotne. Mam na myśli wartość zwracaną . cytat: W linku HTML użyj onclick z takim zwrotemDlaczego nie sprawdzić, który element został kliknięty? Jeśli klikniesz na coś,
window.event.target
zostanie przypisany do elementu, który został kliknięty, a kliknięty element można również przekazać jako argument.Jeśli cel i element nie są sobie równe, rozprzestrzeniło się zdarzenie.
źródło
źródło
Najlepszym rozwiązaniem byłoby obsłużyć zdarzenie za pomocą funkcji javascript, ale w celu użycia prostego i szybkiego rozwiązania wykorzystującego bezpośrednio element html, a gdy „event” i „window.event” są przestarzałe i nie są powszechnie obsługiwane ( https://developer.mozilla.org/en-US/docs/Web/API/Window/event ), sugeruję następujący „twardy kod”:
źródło