Activar/desactivar casillas de verificación

Resuelto AnApprentice asked hace 14 años • 24 respuestas

Tengo lo siguiente:

$(document).ready(function()
{
    $("#select-all-teammembers").click(function() {
        $("input[name=recipients\\[\\]]").attr('checked', true);
    });                 
});

Me gustaría que id="select-all-teammembers"al hacer clic se pueda alternar entre marcado y no marcado. ¿Ideas? ¿No son docenas de líneas de código?

AnApprentice avatar Nov 14 '10 17:11 AnApprentice
Aceptado

Puedes escribir:

$(document).ready(function() {
    $("#select-all-teammembers").click(function() {
        var checkBoxes = $("input[name=recipients\\[\\]]");
        checkBoxes.prop("checked", !checkBoxes.prop("checked"));
    });                 
});

Antes de jQuery 1.6, cuando solo teníamos attr() y no prop() , solíamos escribir:

checkBoxes.attr("checked", !checkBoxes.attr("checked"));

Pero prop()tiene mejor semántica que attr()cuando se aplica a atributos HTML "booleanos", por lo que normalmente se prefiere en esta situación.

Frédéric Hamidi avatar Nov 14 '2010 10:11 Frédéric Hamidi
//this toggles the checkbox, and fires its event if it has    

$('input[type=checkbox]').trigger('click'); 
//or
$('input[type=checkbox]').click(); 
 avatar May 18 '2012 13:05

Sé que esto es antiguo, pero la pregunta era un poco ambigua en el sentido de que alternar puede significar que cada casilla de verificación debería alternar su estado, sea cual sea. Si tiene 3 marcados y 2 sin marcar, al alternar los primeros 3 quedarán sin marcar y los últimos 2 marcados.

Para eso, ninguna de las soluciones aquí funciona, ya que hacen que todas las casillas de verificación tengan el mismo estado, en lugar de alternar el estado de cada casilla de verificación. Al realizar $(':checkbox').prop('checked')muchas casillas de verificación, se devuelve el AND lógico entre todas .checkedlas propiedades binarias, es decir, si una de ellas no está marcada, el valor devuelto es false.

Debe usarlo .each()si realmente desea alternar el estado de cada casilla de verificación en lugar de hacerlos todos iguales, por ejemplo

   $(':checkbox').each(function () { this.checked = !this.checked; });

Tenga en cuenta que no necesita $(this)el controlador interno ya que la .checkedpropiedad existe en todos los navegadores.

Normadize avatar Mar 20 '2013 18:03 Normadize