Co się stanie, jeśli powiążę dwa programy obsługi zdarzeń z tym samym zdarzeniem dla tego samego elementu?
Na przykład:
var elem = $("...")
elem.click(...);
elem.click(...);
Czy ostatni program obsługi "wygrywa", czy oba programy obsługi zostaną uruchomione?
javascript
jquery
event-handling
Lecieć jak po sznurku
źródło
źródło
jQuery('.btn').on('click',handlerClick);
jest wywoływany w różnych miejscach, a właściwie.off
to nic innego?bind
metody. Zobacz szczegóły: learn.jquery.com/jquery-ui/widget-factory/…Załóżmy, że masz dwa programy obsługi, f i g , i chcesz mieć pewność, że są one wykonywane w znanej i ustalonej kolejności, a następnie po prostu je hermetyzuj:
W ten sposób jest (z punktu widzenia jQuery) tylko jeden handler, który wywołuje f i g w określonej kolejności.
źródło
jQuery's .bind () uruchamia się w kolejności, w jakiej został powiązany :
Źródło: http://api.jquery.com/bind/
Ponieważ inne funkcje jQuery (np.
.click()
) Są skrótami.bind('click', handler)
, przypuszczam, że są one również uruchamiane w kolejności, w jakiej są powiązane.źródło
Powinieneś być w stanie użyć łańcuchów do wykonywania zdarzeń w kolejności, np .:
Myślę, że poniższy kod robi to samo
Źródło: http://www.peachpit.com/articles/article.aspx?p=1371947&seqNum=3
TFM mówi również:
źródło
When an event reaches an element, all handlers bound to that event type for the element are fired. If there are multiple handlers registered, they will always execute in the order in which they were bound. After all handlers have executed, the event continues along the normal event propagation path.
Wzywani są obaj handlowcy.
Możesz myśleć o wbudowanym wiązaniu zdarzeń (np.
"onclick=..."
), Gdzie dużą wadą jest tylko jeden moduł obsługi, który może być ustawiony dla zdarzenia.jQuery jest zgodny z modelem rejestracji zdarzeń DOM Level 2 :
źródło
Udało się to z powodzeniem przy użyciu dwóch metod: enkapsulacji Stephan202 i wielu detektorów zdarzeń. Mam 3 zakładki wyszukiwania, zdefiniujmy ich identyfikatory tekstu wejściowego w tablicy:
Gdy zawartość searchtab1 się zmieni, chcę zaktualizować searchtab2 i searchtab3. Zrobiłem to w ten sposób do hermetyzacji:
Wielu detektorów zdarzeń:
Obie metody mi się podobają, ale programista wybrał enkapsulację, jednak działało również wiele odbiorników zdarzeń. Użyliśmy Chrome, aby to przetestować.
źródło
Istnieje obejście, które gwarantuje, że jedna procedura obsługi będzie występować po drugiej: dołącz drugą procedurę obsługi do elementu zawierającego i pozwól, aby zdarzenie się pojawiło. W module obsługi dołączonym do kontenera możesz spojrzeć na event.target i zrobić coś, jeśli to ten, który Cię interesuje.
Być może surowe, ale zdecydowanie powinno działać.
źródło
jquery wykona oba programy obsługi, ponieważ zezwala na wiele programów obsługi zdarzeń. Stworzyłem przykładowy kod. Możesz tego spróbować
próbny
źródło