trouver toutes les cases non cochées dans jquery

197

J'ai une liste de cases à cocher:

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

Je peux collecter toutes les valeurs des cases cochées; ma question est de savoir comment obtenir toutes les valeurs des cases à cocher non cochées? J'ai essayé:

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

pour obtenir la valeur d'une case à cocher non cochée, mais j'ai obtenu:

Erreur de syntaxe, expression non reconnue: non cochée.

quelqu'un peut-il faire la lumière sur cette question? Merci!

Gary
la source

Réponses:

435

Comme l'indique le message d'erreur, jQuery n'inclut pas de :uncheckedsélecteur.
Au lieu de cela, vous devez inverser le :checkedsélecteur:

$("input:checkbox:not(:checked)")
SLaks
la source
4
Et l'utilisation de l'entrée [type = case à cocher] est la plus rapide.
jClark
29

$("input:checkbox:not(:checked)") Vous obtiendrez les cases non cochées.

Dave
la source
10

Vous pouvez le faire en étendant la fonctionnalité jQuerys. Cela réduira la quantité de texte à écrire pour le sélecteur.

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

Vous pouvez ensuite utiliser $("input:unchecked")pour obtenir toutes les cases à cocher et tous les boutons radio cochés.

Thulasiram
la source
7

Il peut également être réalisé avec des js purs de la manière suivante:

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

Ceci récupérera toutes les cases à cocher non cochées et exclura la case à cocher "chkAll" que j'utilise pour cocher | décocher toutes les cases à cocher. Puisque je veux savoir quelle valeur je transmets à la base de données, je les ai désactivées, car les cases à cocher me donnent la valeur 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
la source
2
Vous ne devriez pas inclure quelque chose dans votre réponse qui n'est absolument pas pertinent pour le PO. Il n'utilise pas de chkAllboîte, alors à quoi bon en parler.
MMM
3

Vous pouvez utiliser comme ceci:

$(":checkbox:not(:checked)")
Ehsan
la source
1

Pour sélectionner par class, vous pouvez procéder comme suit:

$("input.className:checkbox:not(:checked)")
Chukwuemeka Inya
la source
0
$(".clscss-row").each(function () {
if ($(this).find(".po-checkbox").not(":checked")) {
               // enter your code here
            } });
UTHIRASAMY
la source
1
Bienvenue sur StackOverflow! Veuillez ajouter une explication à votre code, afin que les autres utilisateurs (pour qui c'est peut-être ce qu'ils recherchent) sachent ce que fait votre code.
Nander Speerstra