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

Ankit Raj Goyal 15 febrero 2024
  1. Compruebe si la casilla de verificación está marcada con operaciones DOM directas utilizando el método .get()
  2. Compruebe si la casilla de verificación está marcada con el método .prop()
  3. Compruebe si la casilla de verificación está marcada con el método .is()
  4. Casos de uso comunes para verificar si la casilla de verificación está marcada con jQuery
Compruebe si la casilla de verificación está marcada con jQuery

Aprenderá varios métodos para marcar la casilla de jQuery en esta publicación de blog. También analizaremos sus métricas de rendimiento para permitirle elegir el mejor método para cada caso de uso.

Mostraremos atajos útiles para casos de uso comunes de casillas de verificación. También tenemos una trampa para un error común que comete la gente.

Compruebe si la casilla de verificación está marcada con operaciones DOM directas utilizando el método .get()

jQuery nos permite acceder al nodo DOM debajo de cada objeto jQuery con el método .get(). Luego podemos consultar este nodo DOM para acceder directamente/establecer diferentes propiedades.

$("button").on("click",function(){
    $("p").html(`<p>
    ${$("input[name='checkboxArray']").get(0).checked?'The first box is checked':'The first box is not checked'}
    // <p/>`);
});

Puede ver la demostración de trabajo de este código a continuación.

¿Está marcada la casilla de verificación con operaciones DOM directas?

Analicemos este código. (Consulte los archivos HTML y CSS adjuntos para comprender mejor el código).

Seleccionamos un botón para activar el evento de verificación y le adjuntamos una devolución de llamada en el evento clic. En la devolución de llamada, mostramos el resultado de la verificación agregándolo como texto a un elemento p; usamos el método jQuery .html().

Tenga en cuenta que este método jQuery sobrescribe el texto anterior, que es nuestro caso de uso deseado aquí. Queremos una salida HTML nueva para cada nuevo cheque.

La principal lógica de comprobación está en la línea que le pasamos al método .html(). Primero seleccionamos todos los elementos de entrada con name = 'checkboxArray' en un objeto jQuery.

Tenga en cuenta que el selector solo devuelve un objeto jQuery y aún no tenemos acceso al nodo DOM subyacente.

Pero luego encadenamos el método .get, así - .get(0). Ahora tenemos acceso al primer nodo DOM en la colección seleccionada de jQuery.

Comprobaremos si la primera casilla de verificación está marcada, y así accederemos al primer nodo DOM pasando 0 como argumento al método .get().

Ahora podemos acceder directamente a la propiedad .checked de jQuery para verificar si la casilla de verificación está seleccionada.

Consejo profesional 1:

La propiedad .checked a la que accedemos arriba es la propiedad JavaScript adjunta al nodo DOM (o, técnicamente, la propiedad IDL). Es diferente del atributo HTML marcado que solo muestra el valor marcado/no marcado inicial o predeterminado del elemento HTML (técnicamente, la propiedad de contenido HTML).

Veremos esta diferencia en detalle más adelante en esta publicación de blog.

Consejo profesional 2:

Las operaciones DOM directas son súper rápidas. Entonces, este método permite usar jQuery para verificar si la casilla de verificación está marcada con un rendimiento superior.

Acceso directo Comprobar si la casilla de verificación está marcada con operaciones DOM directas utilizando el operador de desreferenciación

Cada jQuery se comporta como un objeto de matriz. Por lo tanto, podemos aferrarnos a este comportamiento y reducir parte del código utilizando el operador de desreferenciación de matriz corta [] en lugar del método .get.

$("button").on("click",function(){
    $("p").html(`<p>
    // ${$("input[name='checkboxArray']")[0].checked?'The first box is checked':'The first box is not checked'}
    // <p/>`);
});

El código es el mismo que el anterior excepto por el uso del operador de desreferenciación: ... $("input[name = 'checkboxArray']")[0]... .

Compruebe si la casilla de verificación está marcada con el método .prop()

También podemos usar el método jQuery .prop() para extraer las propiedades subyacentes de JavaScript de los elementos en lugar de acceder directamente al nodo DOM.

$("button").on("click",function(){
    $("p").html(`<p>
    ${$("input[name='checkboxArray']").prop('checked')?'The first box is checked':'The first box is not checked'}
    <p/>`);
});

Puede ver la demostración de trabajo de este código a continuación.

use el método .prop () para verificar si la casilla de verificación está marcada

La mayor parte del código es similar al anterior. Veamos la línea con la diferencia clave, es decir:

 $("input[name='checkboxArray']").prop('checked')...

Extraemos la misma propiedad .checked anterior, pero usamos el método jQuery .prop() aquí.

Consejo profesional:

¿Por qué usar el método jQuery .prop()? El método jQuery .prop() también es una operación rápida (en comparación con el método basado en selector que vemos a continuación).

Es una buena práctica consultar las propiedades de los elementos DOM con JavaScript o bibliotecas basadas en JS como jQuery.

Compruebe si la casilla de verificación está marcada con el método .is()

Combinamos el selector :checked con el método .is() para usar jQuery para verificar si la casilla de verificación está marcada.

El selector :checked devuelve todos los elementos seleccionados o marcados. Para las casillas de verificación, significa que selecciona las casillas que están marcadas.

$("some selector:checked");

// returns those elements that are checked

Puede leer más sobre el selector :checked aquí.

El método .is() compara un objeto jQuery con un selector y devuelve verdadero si coincide con ese selector.

$("some jQuery object").is("some_selector");

//returns true if the jQuery object matches the selector

Puede leer más sobre el método .is() aquí.

Combinemos los dos en un solo código para verificar si la casilla de verificación está marcada con jQuery.

$("button").on("click",function(){
    $("p").html(`<p>
    ${$("input[id='#first']").is(":checked")?'The first box is checked':'The first box is not checked'}
    <p/>`);
});

Vea la demostración de este método a continuación.

¿Está marcada la casilla de verificación con el selector jQuery?

El código para configurar el controlador de eventos y la devolución de llamada es similar a los métodos anteriores. El principal cambio está en la implementación del cheque, así:

$("input[id = '#first']").is(":checked")...

El método .is() devuelve verdadero si la casilla de verificación con el primer id está marcada porque le pasamos el selector :checked como argumento.

Consejo profesional:

El método is() no crea un nuevo objeto jQuery ni modifica el objeto original en su lugar. Este comportamiento lo hace ideal para usar en devoluciones de llamadas y controladores de eventos.

Casos de uso comunes para verificar si la casilla de verificación está marcada con jQuery

Ahora que hemos visto los métodos básicos, construyamos algunos scripts rápidos listos para usar para casos de uso común.

Verifique si la casilla de verificación está marcada usando la ID del elemento

Podemos realizar la comprobación utilizando el ID del elemento con el siguiente código:

$("button").on("click",function(){
    $("p").html(`<p>
    ${$("input[id='#second']").is(":checked")?'The second box is checked':'The secong box is not checked'}
    <p/>`);
});

Seleccionamos el checkbox con el ID second usando el atributo equals selector, pasando la opción id='#second'.

Puede ver la demostración de trabajo a continuación.

¿Está marcada la casilla de verificación con el ID del elemento?

Compruebe si la casilla de verificación está marcada usando la clase

También podemos seleccionar un grupo de casillas de verificación con una clase común para ver si están marcadas. El código es bastante sencillo:

$("button").on("click",function(){
    $("p").html(' ');
    $("input[class='non-first']").each(function(){
        $("p").append(`
        ${$(this).is(":checked")? 'The ' + $(this).attr("id") + ' box is checked':'The ' + $(this).attr("id") +' box is not checked'}
        <br> `);
    });
});

Seleccionamos todas las casillas de verificación con la clase que no es primera y luego iteramos sobre cada una de ellas con el método .each(). Finalmente, ejecutamos la verificación para cada iteración y agregamos la salida al elemento p.

Tenga en cuenta que usamos el método append() para este caso de uso, ya que no queremos sobrescribir el resultado de la iteración anterior.

Puede ver la demostración de trabajo a continuación:

¿Está marcada la casilla de verificación usando clases?

Desmarque la casilla de verificación si está marcado con jQuery

Usamos el siguiente fragmento para desmarcar una casilla de verificación si está marcada con jQuery:

$("button").on("click",function(){
    // To find the checked boxes by ID
    let $checkedBox = $("input[id ='first']");
    // To run the check and toggle if the checkbox is checked
    if ($checkedBox.is(':checked')){
        $checkedBox.prop("checked", false);
    }
});

Usamos la forma set del método .prop() aquí.

$(some_jQuery_object).prop("checked",false);

// sets the "checked" property to false for the selected jQuery object

Puede ver la demostración de trabajo de este fragmento aquí:

Desmarque la casilla de verificación si está seleccionado

Compruebe si todas las casillas de verificación están marcadas con jQuery

Podemos usar el siguiente modelo para encontrar si todas las casillas de verificación en una colección determinada están marcadas.

$("button").on("click",function(){
    let result = true;
    // To find the list of checked boxes in an array of related checkboxes
    let $checkedList = $("input[name='checkboxArray']");
    // To iterate and do something with each checked box on the list above
    // Here we display info related to them in the DOM
    $checkedList.each(function(){
    if (!($(this).is(":checked"))){
        result = false;
    }
    });
    // to display the number of checked boxes
    $("p").html(`All checkboxes are ${result?'':'not'} checked`);
});

Puede ver la demostración de trabajo del fragmento aquí:

Compruebe si todas las casillas de verificación están marcadas

Analicemos la lógica de este código.

Adjuntamos el controlador de eventos como arriba e iteramos sobre cada casilla marcada en la colección. Luego ejecutamos la función .each() en cada casilla de verificación y cambiamos la variable resultado a falso si alguna casilla de verificación no está marcada.

Finalmente, mostramos el resultado.

Compruebe si alguna casilla de verificación está marcada en la colección dada con jQuery

Podemos verificar si al menos una de las casillas de verificación está marcada con el siguiente código:

$("button").on("click",function(){
    let result = false;
    // To find the list of checked boxes in an array of related checkboxes
    let $checkedList = $("input[name='checkboxArray']");
    // To iterate and do something with each checked box on the list above
    // Here we display info related to them in the DOM
    $checkedList.each(function(){
    if ($(this).is(":checked")){
        result = true;
    }
    });
    // to display if any (at least) one of the checkboxes is checked
    $("p").html(`At least one checkbox in the given collection is ${result?'':'not'} checked`);
});

Primero veamos el método en acción con la demostración de trabajo a continuación.

Compruebe si alguna casilla de verificación está marcada

La lógica es simple. Ejecutamos la verificación en cada casilla de verificación de la colección y cambiamos la variable resultado a verdadero si incluso una de las casillas de verificación está marcada.

De lo contrario, mantenemos el valor de la variable resultado en falso y enviamos el mensaje en consecuencia.

Deshabilite el botón Enviar si la casilla de verificación no está marcada con jQuery

Podemos escribir un fragmento simple para deshabilitar un botón de envío si una casilla de verificación específica no está marcada.

$("button").on("click",function(){
    // To find the specific checkbox
    let $checkedBox = $("input[id='third']");
    let $submitBtn = $("input[name='submitBtn']");
    if ($($checkedBox).is(":checked")){
        $submitBtn.prop("disabled",false);
    }
    else {
        $submitBtn.prop("disabled",true);
    }
});

Puede ver el resultado de esta solución a continuación:

Deshabilite el botón Enviar si la casilla de verificación no está marcada

La lógica es simple. Determinamos si la casilla de verificación está marcada con el método .is() y el selector :checked, al igual que nuestros métodos anteriores.

Si la casilla de verificación está marcada, establecemos la propiedad deshabilitada del elemento submitBtn en falso; de lo contrario, lo establecemos en verdadero.

Uso obsoleto del método .attr() para verificar si la casilla de verificación está marcada con jQuery

Los atributos HTML son diferentes de las propiedades DOM. Muchas veces, las propiedades coinciden con el atributo HTML, pero no siempre.

Al igual que en el caso de las casillas de verificación, el atributo HTML marcado es solo el indicador del estado predeterminado o inicial marcado/no marcado del elemento. No se corresponde con la propiedad DOM marcada, que muestra el estado actual marcado/no marcado del elemento.

El método jQuery .attr() solo hace referencia a atributos HTML. Por lo tanto, no debe usar este método para encontrar si la casilla de verificación está seleccionada.

Podría hacer esto con jQuery antes, pero el comportamiento cambió en la versión 1.6 cuando se agregó el método .prop() para acceder a las propiedades DOM explícitamente y .attr() se restringió solo a los atributos HTML.

Puede leer, en detalle, sobre cómo jQuery maneja los atributos y las propiedades de manera diferente aquí.

Artículo relacionado - jQuery Checkbox