Mam:
<form id="myform">
<input type="checkbox" name="check1" value="check1">
<input type="checkbox" name="check2" value="check2">
</form>
Jak używać jQuery do przechwytywania dowolnego zdarzenia czekania występującego w myform
i określania, które pole wyboru zostało przełączone (i wiedzieć, czy zostało włączone, czy wyłączone)?
this
jest już ustawiony na element DOM pola wyboru, więcthis.checked
jest wystarczający. Nie będziesz musiał tworzyć dla niego kolejnego obiektu jQuery, chyba że planujesz nim manipulować.<label for='myInput'>Checkbox:</label><input id='myInput' name='myInput' type='checkbox'/>
) I klikniesz tę etykietę, pole wyboru zostanie zaznaczone, ale ta funkcja NIE zostanie wywołana. Powinieneś skorzystać z.change()
wydarzeniaUżyj zdarzenia zmiany.
źródło
$("input[name=check1]").prop('checked', true)
. Zobacz jsfiddle.net/Z3E8V/2:checkbox
jest to rozszerzenie jQuery i nie jest częścią specyfikacji CSS, zapytania używające:checkbox
nie mogą korzystać ze zwiększenia wydajności zapewnianego przez natywnąquerySelectorAll()
metodę DOM . Aby uzyskać lepszą wydajność w nowoczesnych przeglądarkach, użyj[type="checkbox"]
zamiast tego”.Istnieje kilka przydatnych odpowiedzi, ale żadna nie wydaje się obejmować wszystkich najnowszych opcji. W tym celu wszystkie moje przykłady uwzględniają również obecność pasujących
label
elementów, a także pozwalają dynamicznie dodawać pola wyboru i wyświetlać wyniki w panelu bocznym (poprzez przekierowanieconsole.log
).Nasłuchiwanie
click
zdarzeń nacheckboxes
to nie dobry pomysł, jako że nie pozwoli na klawiatury toggle lub zmian dokonanych w którym dopasowanielabel
element został kliknięty. Zawsze nasłuchujchange
wydarzenia.:checkbox
Zamiast tego użyj pseudo-selektora jQueryinput[type=checkbox]
.:checkbox
jest krótszy i bardziej czytelny.Użyj
is()
z:checked
pseudo-selektorem jQuery , aby sprawdzić, czy pole wyboru jest zaznaczone. Gwarantuje to działanie we wszystkich przeglądarkach.Podstawowa obsługa zdarzeń dołączona do istniejących elementów:
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/2/
Uwagi:
:checkbox
selektora, który jest lepszy niż używanieinput[type=checkbox]
Delegowana procedura obsługi zdarzeń dołączona do elementu ancestor:
Programy obsługi zdarzeń delegowanych są przeznaczone do sytuacji, w których elementy mogą jeszcze nie istnieć (ładowane dynamicznie lub utworzone) i są bardzo przydatne. Oni delegować odpowiedzialność elementu przodka (stąd nazwa).
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/4/
Uwagi:
change
), które przechodzą do niezmiennego elementu nadrzędnego (w tym przypadku#myform
).':checkbox'
w tym przypadku) tylko do elementów w łańcuchu bąbelkowej .document
jako domyślnego, aby połączyć delegowaną procedurę obsługi zdarzeń, jeśli nic innego nie jest bliższe / wygodne.body
do dołączania delegowanych zdarzeń, ponieważ ma to błąd (związany ze stylizacją), który może uniemożliwić mu otrzymywanie zdarzeń myszy.Efektem delegowanych programów obsługi jest to, że pasujące elementy muszą istnieć tylko w czasie zdarzenia, a nie w momencie zarejestrowania procedury obsługi zdarzeń. Pozwala to na dynamicznie dodawane treści w celu generowania zdarzeń.
P: czy jest wolniejszy?
Odp .: Dopóki zdarzenia są z szybkością interakcji z użytkownikiem, nie musisz się martwić o znikomą różnicę w szybkości między delegowaną obsługą zdarzeń a bezpośrednio połączoną procedurą obsługi. Korzyści z delegowania znacznie przewyższają wszelkie drobne wady. Rejestrowanie delegowanych programów obsługi zdarzeń jest w rzeczywistości szybsze ponieważ zazwyczaj łączą się z pojedynczym pasującym elementem.
Dlaczego nie
prop('checked', true)
odpalichange
wydarzenia?Jest to faktycznie zgodne z projektem. Gdyby to wywołało wydarzenie, łatwo znalazłbyś się w sytuacji niekończących się aktualizacji. Zamiast tego po zmianie zaznaczonej właściwości wyślij zdarzenie zmiany do tego samego elementu za pomocą
trigger
(nietriggerHandler
):np. bez
trigger
żadnego zdarzeniaJSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/5/
np. z
trigger
normalnym zdarzeniem zmianyJSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/6/
Uwagi:
triggerHandler
zgodnie z sugestią jednego użytkownika, ponieważ nie spowoduje to wysłania zdarzeń do delegowanej procedury obsługi zdarzeń.JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/8/
chociaż będzie działać dla obsługi zdarzeń bezpośrednio połączonych z elementem:
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/9/
Źródła: http://api.jquery.com/triggerhandler/
Jeśli ktoś ma dodatkowe funkcje, które według niego nie są objęte tym zakresem, prosimy o zaproponowanie dodatków .
źródło
Korzystanie z nowej metody „on” w jQuery (1.7): http://api.jquery.com/on/
źródło
$("input[name=check1]").prop('checked', true)
. Zobacz jsfiddle.net/Z3E8V/2.triggerHandler('change');
po.prop
rozmowie. Następnie przełączy pole ORAZ wywoła zdarzenie.źródło
val()
nie mówi ci, czy takchecked
jesttrue
.Mając na uwadze fakt, że pytający specjalnie zażądał jQuery i że wybrana odpowiedź jest poprawna, należy zauważyć, że ten problem w rzeczywistości nie wymaga jQuery per say. Jeśli ktoś chce rozwiązać ten problem bez tego, może po prostu ustawić
onClick
atrybuty pól wyboru, do których chce dodać dodatkową funkcjonalność, na przykład:HTML:
javascript:
Skrzypce: http://jsfiddle.net/Y9f66/1/
źródło
Wypróbowałem kod z pierwszej odpowiedzi, nie działa, ale mam zabawę i ta praca dla mnie
źródło