Ponieważ PO wymaga zaznaczenia odznacz wszystkie pola wyboru na podstawie innego pola wyboru: id=全選
.
Rozwiązanie, które zostało przedstawione powyżej @ j08691 jest dobre, ale brakuje jednej rzeczy, a to oznacza, że rozwiązanie nie usuwa zaznaczenia z pola wyboru id=全選
, gdy jakiekolwiek inne pole wyboru na liście zostanie niezaznaczone.
Proponuję więc rozwiązanie, które sprawdza/odznacza wszystkie pola wyboru na podstawie pola wyboru id=全選
, a jeśli zaznaczono inne pole wyboru, pole wyboru id=全選
zostanie odznaczone. Jeśli użytkownik ręcznie klika wszystkie pozostałe pola wyboru, pole wyboru id=全選
również powinno być zaznaczone, aby odzwierciedlić związek.
OP przy użyciu tego samego identyfikatora dla wielu pól wyboru, co jest niezgodne z regułami DOM. Element IDs should be unique within the entire document.
więc następujący kod obejmuje wszystkie aspekty tego rodzaju scenariusza.
HTML
<table>
<tr>
<td>
<input type="checkbox" name="checkAll" id="checkAll">全選 (ALL)
<input type="checkbox" name="book" id="book_1" value="book1">book1
<input type="checkbox" name="book" id="book_2" value="book2">book2
<input type="checkbox" name="book" id="book_3" value="book3">book3
<input type="checkbox" name="book" id="book_4" value="book4">book4
<input type="checkbox" name="book" id="book_5" value="book5">book5
</td>
</tr>
</table>
JQuery
$(document).ready(function() {
$('#checkAll').click(function() {
$('input:checkbox').not(this).prop('checked', this.checked);
});
$("[id*=book_]").change(function() {
if ($('input[id*=book_][type=checkbox]:checked').length == $('input[id*=book_][type=checkbox]').length) {
$('#checkAll').prop('checked', true);
} else {
$('#checkAll').prop('checked', false);
}
});
});
Opis selektora atrybutu [imię * = "wartość"]
Wybiera elementów, które mają określoną cechę z wartość zawierająca dane s ubrań.
Tak więc $('#checkAll')
zwraca mi tylko pole wyboru nadrzędny, w którym zaznaczam/odznaczam wszystkie pola wyboru.
I $('[id$=book_]')
zwraca mi wszystkie pola wyboru, oprócz pola wyboru nadrzędnego (全 選). Następnie na podstawie nadrzędnego pola wyboru zaznaczam/odznaczam wszystkie pozostałe pola wyboru.
ja również sprawdza długość pola wyboru innych następnie macierzystych (全 選) pole wyboru, jeśli wszystkie pozostałe pola wyboru są sprawdzić następnie sprawdzić rodzica (全 選) wyboru. Jest to sposób na sprawdzenie wszystkich możliwych warunków i nie przegap żadnego scenariusza.
Demo working JSFiddle here.
podstawie selektorów, wygląda na to, że używasz tego samego identyfikatora wiele razy, co jest nie-nie !! – adeneo
także jego/jej tabela nie ma wierszy lub kolumn ... –
Podczas gdy klasy i nazwy mogą być duplikatami, identyfikator powinien być zawsze unikalny. Dzięki temu JS może identyfikować unikalne elementy i zapewnia większą kontrolę nad manipulowaniem DOM. Jeśli użyjesz tego samego identyfikatora wiele razy, otrzymasz nieoczekiwane wyniki, gdy spróbujesz pobrać elementy według ID, ponieważ tylko jeden element zostanie zwrócony. – thefid