Activar/desactivar casillas de verificación
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?
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.
//this toggles the checkbox, and fires its event if it has
$('input[type=checkbox]').trigger('click');
//or
$('input[type=checkbox]').click();
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 .checked
las 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 .checked
propiedad existe en todos los navegadores.