Czy istnieje sposób, aby mieć keyup
, keypress
, blur
oraz change
wydarzenia nazywają tę samą funkcję w jednej linii lub muszę zrobić je osobno?
Problem, który mam, polega na tym, że muszę zweryfikować niektóre dane za pomocą wyszukiwania bazy danych i chciałbym upewnić się, że sprawdzanie poprawności nie zostanie pominięte, niezależnie od tego, czy zostanie wpisane, czy wklejone w polu.
jquery
events
jquery-events
shaneburgess
źródło
źródło
.on('keyup.foo keypress.foo blur.foo change.foo', …)
czy.on('keyup keypress blur change .foo', …)
?on('click tap', e => {...})
. Słuchacz może być wyzwalany dwukrotnie, chcę tylko raz uruchomić, jak mogę zakodować funkcję słuchacza?$('#element:not(.busy)').on('keyup keypress blur change', function(e){…});
końcu usuń nazwę klasy „zajęty”.Począwszy od jQuery 1.7,
.on()
metoda jest preferowaną metodą dołączania procedur obsługi zdarzeń do dokumentu. We wcześniejszych wersjach.bind()
metoda służy do dołączania modułu obsługi zdarzeń bezpośrednio do elementów.źródło
Szukałem sposobu na uzyskanie typu zdarzenia, gdy jQuery nasłuchuje kilku zdarzeń jednocześnie, a Google umieścił mnie tutaj.
Tak więc dla zainteresowanych
event.type
jest moja odpowiedź:Więcej informacji w dokumencie jQuery .
źródło
Możesz użyć metody powiązania, aby dołączyć funkcję do kilku zdarzeń. Po prostu przekaż nazwy zdarzeń i funkcję modułu obsługi jak w tym kodzie:
Inną opcją jest użycie obsługi łańcuchowej interfejsu API jquery.
źródło
Jeśli podłączysz tę samą procedurę obsługi zdarzeń do kilku zdarzeń, często napotykasz problem z uruchomieniem więcej niż jednego z nich jednocześnie (np. Użytkownik naciska kartę po edycji; naciśnięcie klawisza, zmiana i rozmycie mogą się uruchomić).
Wygląda na to, że tak naprawdę chcesz czegoś takiego:
źródło
Tak to robię.
źródło
Możesz zdefiniować funkcję, której chcesz ponownie użyć, jak poniżej:
Później możesz ustawić dowolną liczbę detektorów zdarzeń na obiekcie, aby wyzwalały tę funkcję za pomocą on („event”), pozostawiając spację pomiędzy nimi, jak pokazano poniżej:
źródło
Odpowiedź Tatu brzmi: intuicyjnie, ale mam pewne problemy w Internet Explorerze z tym sposobem zagnieżdżania / wiązania zdarzeń, nawet jeśli odbywa się to
.on()
metodą.Nie byłem w stanie dokładnie wskazać, z którymi wersjami jQuery jest problem. Ale czasami widzę problem w następujących wersjach:
Moim obejściem było najpierw zdefiniowanie funkcji,
a następnie obsłużyć zdarzenia indywidualnie
To nie jest najładniejsze rozwiązanie, ale działa dla mnie i pomyślałem, że przedstawię to, aby pomóc innym, którzy mogą natknąć się na ten problem
źródło
Ten samouczek dotyczy obsługi wielu zdarzeń.
źródło
Możliwe jest użycie
.on()
, która akceptuje następującą strukturę:,.on( events [, selector ] [, data ], handler )
więc możesz przekazać wiele zdarzeń do tej metody. W twoim przypadku powinno to wyglądać tak:A oto przykład na żywo:
źródło
Można to łatwo zaimplementować za pomocą wbudowanych metod DOM bez dużej biblioteki, takiej jak jQuery, jeśli chcesz, wystarczy trochę więcej kodu - iteruj tablicę nazw zdarzeń i dodaj detektor dla każdego:
źródło