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;
    }
}

¿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;

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;

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.


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.


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
}

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

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.
}

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


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

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" ) ) {};

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.


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


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.


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);
    }
});

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.


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.


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 );
        }
    }
}

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.


4

Casilla de verificación activada

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

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>

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>

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


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.