trova tutte le caselle di controllo deselezionate in jquery


197

Ho un elenco di caselle di controllo:

<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" />

Posso raccogliere tutti i valori delle caselle di controllo selezionate; la mia domanda è: come posso ottenere tutti i valori delle caselle di controllo non selezionate? Provai:

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

per ottenere il valore di una casella non selezionata, ma ho ottenuto:

Errore di sintassi, espressione non riconosciuta: non selezionata.

qualcuno può fare luce su questo problema? grazie!



Risposte:


435

Come indicato dal messaggio di errore, jQuery non include un :uncheckedselettore.
Invece, è necessario invertire il :checkedselettore:

$("input:checkbox:not(:checked)")

4
E l'utilizzo dell'input [type = checkbox] è più veloce.
jClark,

29

$("input:checkbox:not(:checked)") Ti porterà le caselle deselezionate.


10

È possibile farlo estendendo la funzionalità jQuerys. Ciò ridurrà la quantità di testo che devi scrivere per il selettore.

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

È quindi possibile utilizzare $("input:unchecked")per ottenere tutte le caselle di controllo e i pulsanti di opzione che sono selezionati.


7

Inoltre può essere realizzato con js puri in questo modo:

var matches = document.querySelectorAll('input[type="checkbox"]:not(:checked)');

3
$("input[type='checkbox']:not(:checked):not('\#chkAll\')").map(function () { 
   var a = ""; 
   if (this.name != "chkAll") { 
      a = this.name + "|off"; 
   } 
   return a; 
}).get().join();

Ciò recupererà tutte le caselle di controllo non selezionate ed escluderà la casella di controllo "chkAll" che utilizzo per selezionare | deselezionare tutte le caselle di controllo. Dato che voglio sapere quale valore sto passando al database, li ho disattivati, dato che le caselle di controllo mi danno un valore di 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 (,).

2
Non dovresti includere qualcosa nella tua risposta che è completamente irrilevante per il PO. Non usa una chkAllscatola, quindi qual è il punto di menzionarla.
MMM,

3

Puoi usare così:

$(":checkbox:not(:checked)")

1

Per selezionare da class, puoi fare questo:

$("input.className:checkbox:not(:checked)")

0
$(".clscss-row").each(function () {
if ($(this).find(".po-checkbox").not(":checked")) {
               // enter your code here
            } });

1
Benvenuto in StackOverflow! Aggiungi una spiegazione al tuo codice, in modo che altri utenti (per i quali questo potrebbe essere quello che stanno cercando) sappiano cosa fa il tuo codice.
Nander Speerstra,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.