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.