encontrar todas las casillas de verificación sin marcar en jquery

197

Tengo una lista de casillas de verificación:

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

Puedo recopilar todos los valores de las casillas marcadas; mi pregunta es ¿cómo puedo obtener todos los valores de las casillas de verificación sin marcar? Lo intenté:

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

para obtener el valor de una casilla de verificación sin marcar, pero obtuve:

Error de sintaxis, expresión no reconocida: sin marcar.

¿Alguien puede arrojar una luz sobre este tema? ¡gracias!

Gary
fuente

Respuestas:

435

Como dice el mensaje de error, jQuery no incluye un :uncheckedselector.
En cambio, debe invertir el :checkedselector:

$("input:checkbox:not(:checked)")
SLaks
fuente
44
Y usar input [type = checkbox] es más rápido.
jClark
29

$("input:checkbox:not(:checked)") Te conseguirá las cajas sin marcar.

Dave
fuente
10

Puede hacerlo extendiendo la funcionalidad de jQuerys. Esto acortará la cantidad de texto que tiene que escribir para el selector.

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

Luego puede usar $("input:unchecked")para obtener todas las casillas de verificación y botones de radio que están marcados.

Tulasiram
fuente
7

También se puede lograr con js puro de tal manera:

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

Esto recuperará todas las casillas de verificación sin marcar y excluirá la casilla de verificación "chkAll" que uso para marcar | desmarcar todas las casillas de verificación. Como quiero saber qué valor estoy pasando a la base de datos, los configuré en off, ya que las casillas de verificación me dan un valor de 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
fuente
2
No debe incluir algo en su respuesta que sea completamente irrelevante para el OP. Él no usa una chkAllcaja, entonces, ¿cuál es el punto de mencionarlo?
MMM
3

Puedes usar así:

$(":checkbox:not(:checked)")
Ehsan
fuente
1

Para seleccionar por class, puede hacer esto:

$("input.className:checkbox:not(:checked)")
Chukwuemeka Inya
fuente
0
$(".clscss-row").each(function () {
if ($(this).find(".po-checkbox").not(":checked")) {
               // enter your code here
            } });
UTHIRASAMY
fuente
1
¡Bienvenido a StackOverflow! Agregue una explicación a su código para que otros usuarios (para quienes esto podría ser lo que están buscando) sepan qué hace su código.
Nander Speerstra