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!



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

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.


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.


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)');

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 (,).

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

1

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

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

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.