Jeśli używasz stosunkowo nowej wersji JQuery, użyłbym .on ('change', function () {...}), jak wspomniano w odpowiedzi @Daniel De Leon poniżej. Zaletą jest to, że odbiornik zdarzeń „włączony” będzie wiązał się z dynamicznie generowanym kodem HTML.
Edycja: wykonanie tej czynności nie zostanie złapane, gdy pole wyboru zmieni się z innych powodów niż kliknięcie, na przykład przy użyciu klawiatury. Aby uniknąć tego problemu, słuchaj changezamiast click.
W Twoim kodzie brakuje paranu i naprawdę powinien używać metody jQuery do uzyskiwania stanu sprawdzenia.
Pete Michaud
2
Shore: powodem, dla którego getElementById działa, jest to, że zwraca element DOM, podczas gdy funkcja $ jQuery zwraca obiekt jQuery. Obiekt jQuery ma element DOM jako właściwość, ale sam w sobie nie jest obiektem DOM.
Pete Michaud
3
Wiem, że spóźniam się na imprezę, ale to działa tylko wtedy, gdy wywoła to zdarzenie „kliknięcia”. Jeśli z jakiegoś powodu zrobiłbyś coś takiego w innym miejscu w kodzie: $ ("# coś"). Attr ("zaznaczone", "zaznaczone") zdarzenie kliknięcia nigdy nie zostanie wywołane.
David Stinemetze
3
@DavidStinemetze: Powiedziałbym, że changezamiast klikać , można słuchać dużo . Aktualizuję odpowiedź
marcgg
44
Kliknięcie wpłynie na etykietę, jeśli mamy jedną dołączoną do pola wyboru wejściowego?
Muszę wiedzieć, czy kliknięcie oznacza zaznaczenie lub odznaczenie.
omg
1
możesz następnie użyć $ (this) .is (': Checked'), aby przetestować stan właśnie klikniętego elementu
Ty W
-1
$(document).ready(function(){
checkUncheckAll("#select_all","[name='check_boxes[]']");});var NUM_BOXES =10;// last checkbox the user clickedvarlast=-1;function check(event){// in IE, the event object is a property of the window object// in Mozilla, event object is passed to event handlers as a parameterevent=event|| window.event;var num = parseInt(/box\[(\d+)\]/.exec(this.name)[1]);if(event.shiftKey &&last!=-1){var di = num >last?1:-1;for(var i =last; i != num; i += di)
document.forms.boxes['box['+ i +']'].checked=true;}last= num;}function init(){for(var i =0; i < NUM_BOXES; i++)
document.forms.boxes['box['+ i +']'].onclick = check;}
Wygląda na wybór zakresu (tj. Sprawdź pierwszą pozycję, przytrzymaj klawisz Shift, zaznacz ostatnią; a wszystkie pomiędzy nimi są zaznaczone). Jednak to znacznie więcej niż to, o co chodzi. Brakuje jednak jakiegoś kodu, takiego jak checkUncheckAll ().
Odpowiedzi:
Edycja: wykonanie tej czynności nie zostanie złapane, gdy pole wyboru zmieni się z innych powodów niż kliknięcie, na przykład przy użyciu klawiatury. Aby uniknąć tego problemu, słuchaj
change
zamiastclick
.Aby programowo zaznaczyć / usunąć zaznaczenie, zapoznaj się z tematem Dlaczego moje zdarzenie zmiany pola wyboru nie jest wyzwalane?
źródło
change
zamiast klikać , można słuchać dużo . Aktualizuję odpowiedźKliknięcie wpłynie na etykietę, jeśli mamy jedną dołączoną do pola wyboru wejściowego?
Myślę, że lepiej jest użyć funkcji .change ()
źródło
Użyj selektora : selected, aby określić stan pola wyboru:
źródło
Dla JQuery 1.7+ użyj:
źródło
Aby to osiągnąć, użyj poniższego fragmentu kodu .:
Lub możesz zrobić to samo z pojedynczym polem wyboru:
Wersja demonstracyjna: http://jsfiddle.net/creativegala/hTtxe/
źródło
Z mojego doświadczenia wynika, że musiałem wykorzystać currentTarget wydarzenia:
źródło
Ten kod spełnia Twoje potrzeby:
Możesz również sprawdzić to na jsfiddle
źródło
użyj zdarzenia kliknięcia, aby uzyskać najlepszą zgodność z MSIE
źródło
HTML:
źródło