znajdź wszystkie niezaznaczone pole wyboru w jquery

197

Mam listę pól wyboru:

<input type="checkbox" name="answer" id="id_1' value="1" />
<input type="checkbox" name="answer" id="id_2' value="2" />
...
<input type="checkbox" name="answer" id="id_n' value="n" />

Mogę zebrać wszystkie wartości zaznaczonych pól wyboru; moje pytanie brzmi: jak uzyskać wszystkie wartości niezaznaczonych pól wyboru? Próbowałem:

$("input:unchecked").val();

aby uzyskać wartość niezaznaczonego pola wyboru, ale dostałem:

Błąd składni, nierozpoznane wyrażenie: niezaznaczone.

czy ktoś może rzucić światło na ten problem? Dziękuję Ci!

Gary
źródło
2
możliwy duplikat jQuery: Znajdź wszystkie niezaznaczone
Felix Kling

Odpowiedzi:

434

Jak informuje komunikat o błędzie, jQuery nie zawiera :uncheckedselektora.
Zamiast tego musisz odwrócić :checkedselektor:

$("input:checkbox:not(:checked)")
SLaks
źródło
4
A użycie danych wejściowych [typ = pole wyboru] jest najszybsze.
jClark
29

$("input:checkbox:not(:checked)") Otrzymasz odznaczone pola.

Dave
źródło
10

Możesz to zrobić, rozszerzając funkcjonalność jQuerys. Skróci to ilość tekstu, który musisz napisać dla selektora.

$.extend($.expr[':'], {
        unchecked: function (obj) {
            return ((obj.type == 'checkbox' || obj.type == 'radio') && !$(obj).is(':checked'));
        }
    }
);

Następnie można użyć, $("input:unchecked")aby uzyskać wszystkie zaznaczone pola wyboru i przyciski opcji.

Thulasiram
źródło
7

Można to również osiągnąć za pomocą czystego js w następujący sposób:

var matches = document.querySelectorAll('input[type="checkbox"]:not(:checked)');
Pavel Griza
źródło
3
$("input[type='checkbox']:not(:checked):not('\#chkAll\')").map(function () { 
   var a = ""; 
   if (this.name != "chkAll") { 
      a = this.name + "|off"; 
   } 
   return a; 
}).get().join();

Spowoduje to pobranie wszystkich niezaznaczonych pól wyboru i wykluczenie pola wyboru „chkAll”, którego używam do zaznaczenia | odznacz wszystkie pola wyboru. Ponieważ chcę wiedzieć, jaką wartość przekazuję do bazy danych, ustawiłem je na off, ponieważ pola wyboru dają mi wartość on.

//looking for unchecked checkboxes, but don’t include the checkbox all that checks or unchecks all checkboxes
//.map - Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.

//.get - Retrieve the DOM elements matched by the jQuery object.
//.join - (javascript) joins the elements of an array into a string, and returns the string.The elements will be separated by a specified separator. The default separator is comma (,).
cdub
źródło
2
Nie powinieneś umieszczać w odpowiedzi czegoś, co jest całkowicie nieistotne dla PO. Nie używa chkAllpudełka, więc po co o tym wspominać.
MMM
3

Możesz użyć w ten sposób:

$(":checkbox:not(:checked)")
Ehsan
źródło
1

Aby wybrać class, możesz to zrobić:

$("input.className:checkbox:not(:checked)")
Chukwuemeka Inya
źródło
0
$(".clscss-row").each(function () {
if ($(this).find(".po-checkbox").not(":checked")) {
               // enter your code here
            } });
UTHIRASAMY
źródło
1
Witamy w StackOverflow! Dodaj wyjaśnienie do swojego kodu, aby inni użytkownicy (dla których to może być to, czego szukają) wiedzieli, co robi Twój kod.
Nander Speerstra