Chcę, aby zdarzenie było uruchamiane po stronie klienta, gdy pole wyboru jest zaznaczone / niezaznaczone:
$('.checkbox').click(function() {
if ($(this).is(':checked')) {
// Do stuff
}
});
Zasadniczo chcę, aby tak się stało dla każdego pola wyboru na stronie. Czy ta metoda uruchamiania kliknięcia i sprawdzania stanu jest w porządku?
Myślę, że musi być czystszy sposób jQuery. Czy ktoś zna rozwiązanie?
javascript
jquery
event-handling
AnonyMouse
źródło
źródło
Odpowiedzi:
Powiązanie z
change
wydarzeniem zamiastclick
. Jednak prawdopodobnie nadal będziesz musiał sprawdzić, czy pole wyboru jest zaznaczone:Główną zaletą powiązaniaZredagowane w komentarzachchange
zdarzenia zeclick
zdarzeniem jest to, że nie wszystkie kliknięcia pola wyboru powodują zmianę stanu. Jeśli chcesz przechwytywać tylko zdarzenia, które powodują zmianę stanu pola wyboru, potrzebujesz trafnie nazwanegochange
zdarzenia.Zauważ też, że użyłem
this.checked
zamiast owijania elementu w obiekcie jQuery i używania metod jQuery, po prostu dlatego, że krótszy i szybszy jest bezpośredni dostęp do właściwości elementu DOM.Edytuj (patrz komentarze)
Aby uzyskać wszystkie pola wyboru, masz kilka opcji. Możesz użyć
:checkbox
pseudo-selektora:Lub możesz użyć atrybutu równego selektorowi:
źródło
$(this).is(':checked')
. Pomyślałem, że musisz użyćchange
zdarzenia, jeśli chcesz wykryć zmiany z klawiatury (tabulacja, uderzenie spacji), ale, co zaskakujące,click
wykrywa również zmiany, które nie są kliknięciem myszy, nie jestem pewien, czy to jQuery, jsfiddle.net / mendesjuan / E39szclick
,change
czy cokolwiek innego do wyboru na wszystkie strony mogą powodować problemy z wydajnością (depepending na wysokości pola wyboru). Spróbuj$('form').on('change', ':checkbox', function(){ //stuff });
Jeśli w przyszłości odniesiesz się do każdego, kto ma trudności, jeśli dodasz pola wyboru dynamicznie, poprawna zaakceptowana odpowiedź powyżej nie będzie działać. Konieczne będzie wykorzystanie delegowania zdarzeń, które pozwala węzłowi nadrzędnemu na przechwycenie bąbelkowych zdarzeń od określonego potomka i wywołanie zwrotne.
Zauważ, że prawie zawsze nie ma potrzeby używania
document
selektora rodzica. Zamiast tego wybierz bardziej szczegółowy węzeł nadrzędny, aby zapobiec propagowaniu zdarzenia na zbyt wiele poziomów.Poniższy przykład pokazuje, w jaki sposób zdarzenia dynamicznie dodanych węzłów domen nie wyzwalają wcześniej zdefiniowanych detektorów.
Podczas gdy w tym przykładzie użyto delegowania zdarzeń do przechwytywania zdarzeń dla określonego węzła (
h1
w tym przypadku) i wysyłania wywołania zwrotnego dla takich zdarzeń.źródło
Po prostu inne rozwiązanie
źródło
Jeśli Twoim zamiarem jest dołączanie zdarzeń tylko do zaznaczonych pól wyboru (aby uruchomił się, gdy zostaną odznaczone i zaznaczone później), właśnie tego chcesz.
jeśli zamierzasz dołączyć zdarzenie do wszystkich pól wyboru (zaznaczone i niezaznaczone)
jeśli chcesz, aby strzelał tylko wtedy, gdy są sprawdzane (od niezaznaczone), to odpowiedz @James Allardice powyżej.
BTW
input[type='checkbox']:checked
to selektor CSS.źródło
$("input[type='checkbox']:not(:checked)")
źródło
źródło
być może może to być dla ciebie alternatywa.
źródło
To jest rozwiązanie, aby sprawdzić, czy pole wyboru jest zaznaczone, czy nie. Użyj funkcji #prop () //
źródło
Wypróbuj tę weryfikację jQuery
źródło
To bardzo proste, w ten sposób korzystam:
JQuery:
Pozdrowienia!
źródło