$('#checkAll').click(function() {
if(this.checked) {
$('input:checkbox').attr('checked', true);
}
else {
$('input:checkbox').removeAttr('checked');
}
});
$('input:checkbox:not(#checkAll)').click(function() {
if(!this.checked) {
$('#checkAll').removeAttr('checked');
}
else {
var numChecked = $('input:checkbox:checked:not(#checkAll)').length;
var numTotal = $('input:checkbox:not(#checkAll)').length;
if(numTotal == numChecked) {
$('#checkAll').attr('checked', true);
}
}
});
Demostración: http://jsfiddle.net/ThiefMaster/HuM4Q/
Como se señaló en el comentario de la pregunta, una casilla de verificación regular no es perfecto para esto. Mi implementación deshabilita el cuadro "marcar todo" tan pronto como una casilla está desmarcada. Por lo tanto, para desmarcar todas las casillas de verificación aún marcadas, tendrá que hacer clic dos veces (primero para volver a marcar las que no se marcaron y luego para desmarcar todas las demás). Sin embargo, con una casilla de verificación de tres estados esto podría ser necesario ya que la orden de estado podría estar desmarcada-> indefinida-> marcada-> desmarcada, por lo que necesitaría dos clics para pasar de indefinido a desmarcado.
Dado que es probable que no desea comprobar todas las casillas en su página en "Ver todos", reemplazar con, por ejemplo .autoCheckBox
o input.autoCheckBox:checkbox
y dé esas casillas de verificación class="autoCheckBox"
.
Si desea que todas las casillas de verificación dentro de una cierta forma, un uso simple #idOfYourForm input:checkbox
o form[name=nameOfYourForm] input:checkbox
Desde el punto de vista de la interfaz de usuario, es probable que desee una [casilla de verificación de tres estados] (http://stackoverflow.com/questions/17260 96/tri-state-check-box-in-html) para que pueda mostrar el caso de algo-en-algún-caso como algo más. Pero tienes que falsificar estos en HTML, o <5 al menos. He usado una buena implementación antes, pero no es una de las respuestas en esa pregunta, no recuerdo dónde. [El primer ejemplo allí] (http://shamsmi.blogspot.com/2008/12/tri-state-checkbox-using-javascript.html) puede hacerlo de la caja, aunque no en jQuery, y usando imágenes separadas para cada estado en lugar de uno + CSS. – Rup
Otro ejemplo alternativo: http://jsfiddle.net/Raynos/mSFts/ – Raynos
@Raynos: Bueno, pero no marca "verificar todo" cuando se marcan manualmente todas las casillas de verificación. – ThiefMaster