2010-09-15 20 views
10

Hola a todos. He estado tratando de resolver esto por un tiempo ahora.Determine si todas las casillas de verificación dentro del objeto jQuery están marcadas, devuelva como booleano

creo un objeto jQuery de casillas de verificación y almacenarlo en una variable:

$group1 = $('#checkbox1,#checkbox2,#checkbox3,#checkbox4'); 

El usuario no puede continuar a menos que se comprueban todas las casillas de verificación de ese grupo.

He estado usando una sentencia if combinado con .is(':checked') para encontrar un valor booleano:

if($group1.is(':checked')){ 
    //continue is OK 
} 

... .is(':checked') pero volverá TRUE si cualquier casillas de verificación se comprueban dentro del grupo. Básicamente, .is(':checked') realiza una operación OR en los elementos seleccionados en $ group1. Estoy buscando una operación Y, por lo que todos los elementos seleccionados deben marcarse para regresar al TRUE. ¿Hay una función jQuery que hace esto u otra solución alternativa?

+0

Sugiero que elimine '$' de sus nombres de variables. Esto no es obligatorio en JavaScript y está destinado a ser utilizado por código generado mecánicamente. Puedes usarlo (como hace jQuery), pero no es una buena práctica romper esta convención. – jwueller

+0

Sugeriría agregar clases a sus casillas de verificación para que pueda hacer $ ('. ClassName: checkbox') o, si desea seleccionar todas las casillas de verificación, simplemente haga: $ (': checkbox') – JasCav

+7

@elusive eso es realmente un convención jQuery común para representar variables que son colecciones jQuery. Recomiendo que continúe usándolo. Ayuda a la legibilidad del código y no duele nada. – BBonifield

Respuesta

21

@ Adam está fuera sólo un poco

if($group1.filter(':not(:checked)').length === 0){ 
    //continue is OK 
} 
+1

El ejemplo se puede encontrar aquí: http://www.jsfiddle.net/FgY32/1/ – JasCav

+1

agradable y conciso – mcgrailm

+0

¡Mucho más elegante que mi solución! –

2

Corregido:

Usted podría filter para obtener sólo los elementos que son notchecked, y después comprobar para ver si hay alguno cualquier elemento todavía en la colección, si no hay más que todos los elementos en el grupo se comprueban:

if($group1.filter(':not(:checked)').length === 0){ 
    //continue is OK 
} 
+2

Si todas las casillas de verificación deben ser marcadas, entonces '$ group1.length == $ group.filter (': checked'). Length' podría ser más apropiado –

+0

No resuelve su problema ... no está buscando ver si se comprueba CUALQUIERA, está buscando ver si TODOS están marcados. (Aunque es una solución fácil)) – JasCav

+0

La lógica aquí aseguraría que al menos una de las casillas de verificación esté marcada en lugar de garantizar que todas estén. – BBonifield

1

yo sugeriría que usted da a sus casillas de verificación aa clase, entonces

var len = $('.check_needed').length; 
var chk = $('.check_needed:checked').length; 
if (len == check){ 
    //carry on 
}else{ 
    // go home 
} 
+0

la solución de Adam es básicamente la misma EDIT: bien BBonified es – mcgrailm

1

Creo que se necesita algo como:

$(document).ready(function(){ 
    var checked = true; 

    $('input:checkbox').each(function(){ 
     if(checked){ 
     checked = $(this).is(':checked'); 
     } 
    }); 
}); 

Esto debería establecer comprobado = false si alguno de ellos está sin marcar.

0

También puede utilizar

$ (function() {

// add multiple select/deselect functionality 
$("#selec_all_chk").click(function() { 
     $('.chk_class').attr('checked', this.checked); 
}); 

// if all checkbox are selected, check the selectall checkbox 
// else uncheck 
$(".chk_class").click(function(){ 

    if($(".chk_class").length == $(".chk_class:checked").length) { 
     $("#selec_all_chk").attr("checked", "checked"); 
    } else { 
     $("#selec_all_chk").removeAttr("checked"); 
    } 

}); 

});

Cuestiones relacionadas