2011-08-04 18 views
5

Jeśli Mam obsługi zdarzeń takich jak:Chain dwa jquery wydarzeń

function A() { 
... 
} 

to możliwe, aby przypisać do więcej niż jednego zdarzenia:

$("#test1").keyup(A); 
$("#test2").change(A); 

Ale zastanawiam się, czy to możliwe, aby to zrobić z jednym tylko zdaniu, coś jak:

$("#test1").keyup, $("#test2").change (function() { 
    ... 
}); 
+0

Nie sądzę więc, ale potem, nie jestem ekspertem. Ciekawy, aby zobaczyć odpowiedzi tutaj. – Mrchief

+0

Chcesz zdarzenia łańcucha, które deklarujesz na różnych identyfikatorach? Co naprawdę chcesz zrobić? –

+0

Chcę przypisać tę samą funkcję do różnych identyfikatorów i różnych zdarzeń dla nich (mój przypadek: SELECT musi reagować na zdarzenie onChange i tekst INPUT musi odpowiadać na onKeyUp, ale jest to ta sama funkcja UpdateGraph, który zarządza zdarzeniem) – Ivan

Odpowiedz

0

Krótka odpowiedź? Nie. Długa odpowiedź? Ani trochę.

Przykro nam, że nie miałem odpowiedzi, na którą liczyłeś. Ale dobrą wiadomością jest to, że twój kod wygląda na miejscu poza tym ograniczeniem.

+0

Odpowiedź brzmi: tak, można to zrobić, patrz odpowiedź z @ jacek-kaniuk poniżej –

+1

@RensdeNobel: Odpowiedź jest nadal No. Przynajmniej nie w sposób jaki OP chciał, z konkretnym elementem/wyzwalaczem kombinacje wyzwalające funkcję.Można oczywiście posłuchać wszystkich wyzwalaczy/zdarzeń, których chcesz użyć, oraz wszystkich elementów, które mogą wywołać te wyzwalacze/zdarzenia, a następnie spojrzeć na obiekt zdarzenia, aby ustalić, czy wykryto właściwą kombinację, ale prawdopodobnie łatwiejsze powiązanie każdej kombinacji osobno. –

3
$("#test2").bind('keyup change', A); 

/edit jak dla różnych elementów i wydarzeń - to:

$("#test1, #test2").bind('keyup change', A); 

lub

$("#test1").bind('keyup', A); 
$("#test2").bind('change', A); 

zależności od czego można się spodziewać. Nie ma prostszego sposobu:

+0

Są to 2 różne elementy. Wszyscy tu przeskakują. – Mrchief

+0

To będzie działać, aby nasłuchiwać tych dwóch zdarzeń na elementach pasujących do selektora jQuery, ale OP szuka dwóch różnych zdarzeń na dwóch różnych elementach. Więc tylko "keyup" na "# test1" LUB "zmiana" na "# test2", ale nie "zmiana" na "# test1". –

+0

@Jacek_FH - Drugi przykład twojej edycji będzie działał. Ale wtedy OP może równie dobrze trzymać się tego, co obecnie mają. Pierwszy przykład twojej edycji wiąże oba zdarzenia z obydwoma elementami. –

0

Jeśli były to ten sam element, powiedzmy #test1, można łańcuch metod

$('#test1').change(A).keyup(A); 

Jednak z więcej niż 1 elementu nie można ich łańcuch, czy cokolwiek innego podobnego do przykładu.

2

Tak, tak, jest. To naprawdę straszne.

$("#test1").keyup(A).parent().find("#test2").change(A); 

http://jsfiddle.net/8RwZY/

Istnieje również to okrucieństwo:

$("#test1, #test2").eq(0).keyup(A).end().eq(1).change(A); 

http://jsfiddle.net/8RwZY/1/

+0

Lol! Sugerowałbym, aby nigdy nie używać takich podobnych horrorów kodowania. –

+0

@Jose Faeti - Całkowicie się zgadzam. Chyba że próbujesz zmusić kogoś do rzucenia palenia: p – karim79