2010-11-03 24 views
98

Sé cómo ver si se selecciona o no una casilla de verificación individual.jQuery ver si se marcan casillas de verificación o no

Pero Im teniendo problemas con la siguiente - dada una forma de identificación que necesito para ver si cualquier de las casillas de verificación están seleccionados (es decir 1 o más), y tengo que ver si ninguno se seleccionan. Básicamente, necesito dos funciones separadas que respondan estas dos preguntas. La ayuda sería apreciada ¡Gracias!

En realidad, solo necesitaría una función para decirme si none están seleccionados. Sabiendo esto respondería la otra pregunta.

+0

relacionado http://stackoverflow.com/questions/901712/check-checkbox-checked-property-using-jquery –

Respuesta

192

Puede usar algo como esto

if ($("#formID input:checkbox:checked").length > 0) 
{ 
    // any one is checked 
} 
else 
{ 
    // none is checked 
} 
+6

'$ (" # formID inpu t: checkbox: checked "). length" sería suficiente aquí, también – Damon

+1

jQuery doc http://api.jquery.com/checked-selector/ –

+0

@Damon Supongo que quería decir 'if ($ (" # formID inputID: casilla de verificación: marcada "). longitud) {}' (sin el '> 0') sería suficiente porque 0 es un valor falsey, ver http://james.padolsey.com/javascript/truthy-falsey/ –

6

Usted puede hacer esto:

if ($('#form_id :checkbox:checked').length > 0){ 
    // one or more checkboxes are checked 
    } 
    else{ 
    // no checkboxes are checked 
    } 

Dónde:

  • :checkbox selector de filtro selecciona todos casilla.
  • :checked seleccionará comprobado casillas de verificación
  • length dará el número de controladas únicos allí
+0

jQuery dice con respecto al selector ': checkbox':' Para un mejor rendimiento en navegadores modernos, use [type = "checkbox "]', vea http://api.jquery.com/checkbox-selector/ –

3

Usted puede hacer un simple retorno de la .length aquí:

function areAnyChecked(formID) { 
    return !!$('#'+formID+' input[type=checkbox]:checked').length; 
} 

Esta búsqueda de casillas de verificación en el formulario dado, ve si hay :checked y devuelve true si lo están (dado que la longitud sería 0 en caso contrario). Para que sea un poco más claro, aquí está la versión convertida no booleano:

function howManyAreChecked(formID) { 
    return $('#'+formID+' input[type=checkbox]:checked').length; 
} 

Esto se obtendrá una cuenta de cuántas fueron controlados.

21

jQuery .is pondrá a prueba todos los elementos especificados y devolver verdadero si al menos uno de ellos se corresponda selector:

if ($(":checkbox[name='choices']", form).is(":checked")) 
{ 
    // one or more checked 
} 
else 
{ 
    // nothing checked 
} 
+0

Aunque 'is()' parece funcionar, teniendo ': checked' directamente en el selector como se indica en la respuesta de @ rahul parece mas apropiado es() parece más útil cuando hay "devoluciones de llamada internas", ver http://api.jquery.com/is/. ¿O me estoy perdiendo algo? –

+0

No, es más o menos lo que está escrito en los documentos: comprueba si un elemento se corresponde con el atributo especificado. Aplicarlo como filtro y luego verificar si se obtiene al menos un ítem en el resultado es el mismo pero más largo y no tan expresivo. –

+0

+1 por el hecho de que '.is (": checked ")' en su solución es más expresivo, aunque no está seguro del resto. –

2

respuesta de Rahul es el mejor ajuste para su pregunta. De todos modos, si tiene un grupo de casillas de verificación para marcar y no toda la casilla de verificación en su formulario, puede buscarla.

Ponga un nombre de clase para todas las casillas de verificación que desea comprobar, digamos por ejemplo, un nombre de clase test_check y ahora se puede comprobar si cualquiera de las casillas de verificación se comprueba que pertenece al grupo por:

$("#formID .test_check:checked").length > 0 

Si devuelve true, suponga que una o más casillas de verificación están marcadas con el nombre de clase test_check y ninguna marcada si devuelve false.

Espero que ayude a alguien.Gracias:) -

1

Esto es lo que he usado para comprobar si ninguna casilla de verificación en una lista de casillas de verificación habían cambiado:

$('input[type="checkbox"]').change(function(){ 

     var itemName = $('select option:selected').text(); 

     //Do something. 

});  
0

Sin utilizar 'longitud' puede hacerlo de esta manera:

if ($('input[type=checkbox]').is(":checked")) { 
     //any one is checked 
} 
else { 
//none is checked 
} 
Cuestiones relacionadas