Compruebe si la casilla de verificación está marcada con jQuery

1189

¿Cómo puedo verificar si una casilla de verificación en una matriz de casilla de verificación está marcada usando la identificación de la matriz de casilla de verificación?

Estoy usando el siguiente código, pero siempre devuelve el recuento de casillas marcadas independientemente de la identificación.

function isCheckedById(id) {
    alert(id);
    var checked = $("input[@id=" + id + "]:checked").length;
    alert(checked);

    if (checked == 0) {
        return false;
    } else {
        return true;
    }
}
Jake
fuente
¿Una casilla de verificación ? Nunca he oído hablar de tal cosa. ¿Es algo específico de JQuery o un complemento / widget?
Pekka
2
una matriz de casillas de verificación significa algo como: <input type = "checkbox" name = "chk []" id = "chk []" value = "apple"> <input type = "checkbox" name = "chk []" id = "chk []" value = "banana"> <input type = "checkbox" name = "chk []" id = "chk []" value = "orange"> etc.
Jake
2
¿Qué tiene de malo una matriz de casillas de verificación? ¿De qué otra forma harías una entrada de "marcar todo lo que corresponda"?
nickf
55
¡Asegúrate de que tus ids sean únicos! namepuede (y debería, en este caso) repetir, ¡pero encontrará muchas cosas extrañas si duplica el id! = D
Jeff Rupert
Tuve que eliminar la "@" para que funcione. Además, puede minimizar las últimas 5 líneas a 1: return (marcado! = 0);
B. Clay Shannon

Respuestas:

690

Las ID deben ser únicas en su documento, lo que significa que no debe hacer esto:

<input type="checkbox" name="chk[]" id="chk[]" value="Apples" />
<input type="checkbox" name="chk[]" id="chk[]" value="Bananas" />

En su lugar, suelte la ID y luego selecciónelas por nombre o por un elemento contenedor:

<fieldset id="checkArray">
    <input type="checkbox" name="chk[]" value="Apples" />

    <input type="checkbox" name="chk[]" value="Bananas" />
</fieldset>

Y ahora el jQuery:

var atLeastOneIsChecked = $('#checkArray:checkbox:checked').length > 0;
//there should be no space between identifier and selector

// or, without the container:

var atLeastOneIsChecked = $('input[name="chk[]"]:checked').length > 0;
nickf
fuente
Para mí trabajé sin comillas dobles en input name: input [name = multiplecheck []]: marcado, ¡gracias!
Alejandro Quiroz
30
¿Por qué usar $('#checkArray :checkbox:checked').length > 0;cuando el más simple $('#checkArray').checkedfunciona y está disponible en más versiones?
Don Cheadle
55
@Oddman funciona, solo que no en un objeto jquery. en lugar de $ (elem) .checked, intente elem.checked.
Dan Williams
1
@DanWilliams sí, pero no en el ejemplo que dio mmcrae.
Oddman
El segundo funcionó para mí. ¡¡Gracias!! var atLeastOneIsChecked = $('input[name="chk[]"]:checked').length > 0;
David Silva-Barrera
2027
$('#' + id).is(":checked")

Eso se obtiene si la casilla de verificación está marcada.

Para una variedad de casillas de verificación con el mismo nombre, puede obtener la lista de las marcadas:

var $boxes = $('input[name=thename]:checked');

Luego, para recorrerlos y ver qué está marcado, puede hacer:

$boxes.each(function(){
    // Do stuff here with this
});

Para saber cuántos están marcados, puede hacer:

$boxes.length;
John Boker
fuente
2
Otra forma es $('#'+id).attr('checked'), que es equivalente $('#' + id).is(":checked")pero más fácil de recordar IMO.
Zubin
85
@ Zubin: Ten cuidado con .attr('checked'). Su comportamiento cambió en jQuery 1.6. Solía ​​volver falseo true. Ahora vuelve undefinedo "checked". .is(':checked')No tiene este problema.
Joey Adams
1
@John Boker: perdón por el comentario necro pero, ¿por qué parece que $('.ClassName').is(':checked')no funciona pero $('#' + id).is(":checked")sí? aparte del hecho de que uno busca por id y otro por classname.
Mike_OBrien
@Mike_OBrien El problema podría ser que hay más de una casilla de verificación con ese nombre de clase. El es (': marcado') realmente solo funciona en un elemento.
John Boker
55
Nota: size () ha quedado en desuso desde jQuery 1.8 - use .length en su lugar
JM4
312
$('#checkbox').is(':checked'); 

El código anterior devuelve verdadero si la casilla de verificación está marcada o falso si no.

Prasanna Rotti
fuente
77
muy útil cuando se usa $ (this) .is (': marcado'); ¡Gracias!
PinoyStackOverflower
De esta manera es útil verificar si la casilla está marcada, donde sabe cómo seleccionarla, gracias
Omar Isaid
Esto funcionó para mí, lo usé antes var isChecked = $('#CheckboxID').attr('checked') ? true : false; pero no siempre devolvió el valor correcto. ¡Así que gracias!
Leiit
121

Todos los siguientes métodos son útiles:

$('#checkbox').is(":checked")

$('#checkbox').prop('checked')

$('#checkbox')[0].checked

$('#checkbox').get(0).checked

Se recomienda evitar DOMelement o "this.checked" en línea, en lugar de jQuery en el método se debe usar el detector de eventos.

justnajm
fuente
98

Código jQuery para verificar si la casilla está marcada o no:

if($('input[name="checkBoxName"]').is(':checked'))
{
  // checked
}else
{
 // unchecked
}

Alternativamente:

if($('input[name="checkBoxName"]:checked'))
{
    // checked
}else{
  // unchecked
}
Kundan Roy
fuente
44
La primera solución es que falta :... una correcta es: if(('input[name="checkBoxName"]').is(':checked')).
Aerendir
Falta el signo de dólar ($), debería serlo if($('input[name="checkBoxName"]').is(':checked')).
Penny Liu el
El segundo nunca ejecutará el elsebloque, ya que un objeto jQuery, incluso si no contiene elementos coincidentes, es "verdadero". Añadir .lengthal final, entonces estás hablando.
Heretic Monkey
69

El concepto más importante para recordar sobre el atributo marcado es que no corresponde a la propiedad marcada. El atributo en realidad corresponde a la propiedad defaultChecked y debe usarse solo para establecer el valor inicial de la casilla de verificación. El valor del atributo marcado no cambia con el estado de la casilla de verificación, mientras que la propiedad marcada sí. Por lo tanto, la forma compatible con varios navegadores para determinar si una casilla de verificación está marcada es usar la propiedad

Todos los métodos a continuación son posibles

elem.checked 

$(elem).prop("checked") 

$(elem).is(":checked") 
Techie
fuente
38

Puedes usar este código,

if($("#checkboxId").is(':checked')){
     // Code in the case checkbox is checked.
} else {
     // Code in the case checkbox is NOT checked.
}
Mohammed Shaheen MK
fuente
29

Según la documentación de jQuery , existen las siguientes formas de verificar si una casilla está marcada o no. Consideremos una casilla de verificación, por ejemplo (marque Working jsfiddle con todos los ejemplos)

<input type="checkbox" name="mycheckbox" id="mycheckbox" />
<br><br>
<input type="button" id="test-with-checked" value="Test with checked" />
<input type="button" id="test-with-is" value="Test with is" />
<input type="button" id="test-with-prop" value="Test with prop" />

Ejemplo 1 - Con marcado

$("#test-with-checked").on("click", function(){
    if(mycheckbox.checked) {
        alert("Checkbox is checked.");
    } else {
        alert("Checkbox is unchecked.");
    }
}); 

Ejemplo 2 - Con jQuery es, NOTA -: marcado

var check;
$("#test-with-is").on("click", function(){
    check = $("#mycheckbox").is(":checked");
    if(check) {
        alert("Checkbox is checked.");
    } else {
        alert("Checkbox is unchecked.");
    }
}); 

Ejemplo 3 - Con jQuery prop

var check;
$("#test-with-prop").on("click", function(){
    check = $("#mycheckbox").prop("checked");
    if(check) {
         alert("Checkbox is checked.");
    } else {
        alert("Checkbox is unchecked.");
    }
}); 

Comprobar trabajo jsfiddle

Subodh Ghulaxe
fuente
26

Puedes probar esto:

<script>
function checkAllCheckBox(value)
{
   if($('#select_all_').is(':checked')){
   $(".check_").attr ( "checked" ,"checked" );
    }
    else
    {
        $(".check_").removeAttr('checked');
    }

 }

</script>
<input type="checkbox" name="chkbox" id="select_all_" value="1" />


<input type="checkbox" name="chkbox" class="check_" value="Apples" />
<input type="checkbox" name="chkbox" class="check_" value="Bananas" />
<input type="checkbox" name="chkbox" class="check_" value="Apples" />
<input type="checkbox" name="chkbox" class="check_" value="Bananas" />
Vishnu Sharma
fuente
Esta ya no es una buena forma de hacer las cosas, ya que attrsolo refleja el valor del atributo en HTML, no el valor de la propiedad en el DOM. Consulte la documentación paraattr , donde dice "Para recuperar y cambiar las propiedades DOM, como el checked, selectedo el disabledestado de los elementos de formulario, use el .prop()método", y la documentación paraprop , donde dice "El .prop()método debe usarse para establecer disabledy en su checkedlugar del .attr()método ".
Heretic Monkey
21

Puede usar cualquiera de los siguientes códigos recomendados por jquery.

if ( elem.checked ) {};
if ( $( elem ).prop( "checked" ) ) {};
if ( $( elem ).is( ":checked" ) ) {};
endur
fuente
20

Sé que el OP quiere jquery, pero en mi caso JS puro fue la respuesta, así que si alguien como yo está aquí y no tiene jquery o no quiere usarlo, aquí está la respuesta de JS:

document.getElementById("myCheck").checked

Devuelve verdadero si la entrada con ID myCheck está marcada y falsa si no está marcada.

Simple como eso.

Combinar
fuente
11
lo que significa que $("#myCheck")[0].checkedfuncionará en jquery! : D
Sancarn
10

Puedes hacerlo simplemente como;

Violín de trabajo

HTML

<input id="checkbox" type="checkbox" />

jQuery

$(document).ready(function () {
    var ckbox = $('#checkbox');

    $('input').on('click',function () {
        if (ckbox.is(':checked')) {
            alert('You have Checked it');
        } else {
            alert('You Un-Checked it');
        }
    });
});

o incluso más simple;

$("#checkbox").attr("checked") ? alert("Checked") : alert("Unchecked");

Si checkboxestá marcado, volverá de lo truecontrarioundefined

Aamir Shahzad
fuente
or even simpler;->$("#checkbox").checked
Don Cheadle
10

Esta es también una idea que uso con frecuencia:

var active = $('#modal-check-visible').prop("checked") ? 1 : 0 ;

Si está marcado, devolverá 1; de lo contrario, devolverá 0.

Rtronic
fuente
7

Demo simple para marcar y configurar una casilla de verificación.

jsfiddle !

$('.attr-value-name').click(function() {
    if($(this).parent().find('input[type="checkbox"]').is(':checked'))
    {
        $(this).parent().find('input[type="checkbox"]').prop('checked', false);
    }
    else
    {
        $(this).parent().find('input[type="checkbox"]').prop('checked', true);
    }
});
Una ilusión
fuente
7

Solo para decir en mi ejemplo, la situación era un cuadro de diálogo que luego verificó la casilla de verificación antes de cerrar el cuadro de diálogo. Ninguno de los anteriores y ¿Cómo verificar si una casilla de verificación está marcada en jQuery? y jQuery si la casilla de verificación está marcada tampoco parecía funcionar.

En el final

<input class="cb" id="rd" type="checkbox">
<input class="cb" id="fd" type="checkbox">

var fd=$('.cb#fd').is(':checked');
var rd= $('.cb#rd').is(':checked');

Esto funcionó llamando a la clase y luego a la ID. en lugar de solo la identificación. Puede deberse a que los elementos DOM anidados en esta página causan el problema. La solución estaba arriba.

VH
fuente
6

Para casilla de verificación con una identificación

<input id="id_input_checkbox13" type="checkbox"></input>

simplemente puedes hacer

$("#id_input_checkbox13").prop('checked')

obtendrá trueo falsecomo valor de retorno para la sintaxis anterior. Puede usarlo en la cláusula if como expresión booleana normal.

Aniket Thakur
fuente
5

Algo como esto puede ayudar

togglecheckBoxs =  function( objCheckBox ) {

    var boolAllChecked = true;

    if( false == objCheckBox.checked ) {
        $('#checkAll').prop( 'checked',false );
    } else {
        $( 'input[id^="someIds_"]' ).each( function( chkboxIndex, chkbox ) {
            if( false == chkbox.checked ) {
                $('#checkAll').prop( 'checked',false );
                boolAllChecked = false;
            }
        });

        if( true == boolAllChecked ) {
            $('#checkAll').prop( 'checked',true );
        }
    }
}
Abdul Hamid
fuente
5

De hecho, de acuerdo con jsperf.com , ¡las operaciones DOM son más rápidas, luego $ (). Prop () seguido de $ (). Is () !!

Aquí están las sintaxis:

var checkbox = $('#'+id);
/* OR var checkbox = $("input[name=checkbox1]"); whichever is best */

/* The DOM way - The fastest */
if(checkbox[0].checked == true)
   alert('Checkbox is checked!!');

/* Using jQuery .prop() - The second fastest */
if(checkbox.prop('checked') == true)
   alert('Checkbox is checked!!');

/* Using jQuery .is() - The slowest in the lot */
if(checkbox.is(':checked') == true)
   alert('Checkbox is checked!!');

Prefiero personalmente .prop(). A diferencia .is(), también se puede usar para establecer el valor.

Pantera negra
fuente
4

Casilla de verificación activada

$("#checkall").click(function(){
    $("input:checkbox").prop( 'checked',$(this).is(":checked") );
})
fuente
fuente
2

Con este código, puede marcar al menos una casilla de verificación seleccionada o no en diferentes grupos de casillas de verificación o desde varias casillas de verificación. Con esto, no puede requerir eliminar ID o ID dinámicas. Este código funciona con las mismas ID.

Enlace de referencia

<label class="control-label col-sm-4">Check Box 2</label>
    <input type="checkbox" name="checkbox2" id="checkbox21" value=ck1 /> ck1<br />
    <input type="checkbox" name="checkbox2" id="checkbox22" value=ck2 /> ck2<br />

<label class="control-label col-sm-4">Check Box 3</label>
    <input type="checkbox" name="checkbox3" id="checkbox31" value=ck3 /> ck3<br />
    <input type="checkbox" name="checkbox3" id="checkbox32" value=ck4 /> ck4<br />

<script>
function checkFormData() {
    if (!$('input[name=checkbox2]:checked').length > 0) {
        document.getElementById("errMessage").innerHTML = "Check Box 2 can not be null";
        return false;
    }
    if (!$('input[name=checkbox3]:checked').length > 0) {
        document.getElementById("errMessage").innerHTML = "Check Box 3 can not be null";
        return false;
    }
    alert("Success");
    return true;
}
</script>
Parth Patel
fuente
Información básica: los identificadores de elementos html no se repiten (por ejemplo: id = "checkbox2", id = "checkbox3"). Esta no es una buena práctica. Podemos usar la clase varias veces en una página.
Anand Somasekhar
1

Dado que es mediados de 2019 y jQuery a veces pasa a segundo plano a cosas como VueJS, React, etc. Aquí hay una opción de escucha de descarga de Javascript puro:

<script>
  // Replace 'admincheckbox' both variable and ID with whatever suits.

  window.onload = function() {
    const admincheckbox = document.getElementById("admincheckbox");
    admincheckbox.addEventListener('click', function() {
      if(admincheckbox.checked){
        alert('Checked');
      } else {
        alert('Unchecked');
      }
    });
  }
</script>
Conceder
fuente
0

Su pregunta no está clara: desea dar "ID de matriz de casilla de verificación" en la entrada y llegar true/falsea la salida; de esta manera no sabrá qué casilla de verificación se marcó (como sugiere su nombre de función). Así que a continuación está mi propuesta de cuerpo, isCheckedByIdque en la entrada toma la casilla de verificación idy en la salida de retorno true/false(es muy simple, pero su ID no debe ser una palabra clave),

this[id].checked

Kamil Kiełczewski
fuente
-7

usa el código a continuación

<script>

$(document).ready(function () {
  $("[id$='chkSendMail']").attr("onchange", "ShowMailSection()");
}

function ShowMailSection() {
  if ($("[id$='chkSendMail'][type='checkbox']:checked").length >0){
      $("[id$='SecEmail']").removeClass("Hide");
  }
</script>
Code_Worm
fuente
De Verdad? ¿Qué tal$(function() { $("[id$='chkSendMail']").on("change", ShowMailSection); });
Mplungjan
Y todas son casillas de verificación, así que $("[id$='chkSendMail']:checked]")debería funcionar bien
mplungjan