2012-01-03 15 views
15

Tengo una casilla de verificación para seleccionar todos los problemas. Tengo una casilla de verificación múltiple que puede ser activada por una maestra.jQuery casilla de verificación: seleccionar todo/ninguno excepto uno

Si la maestra está marcada, puede seleccionar cualquier casilla (esto funciona). Ahora mi problema es cuando compruebo "ninguno" todos ellos se han ido, incluso el maestro

Lo que necesito es no desmarcar el maestro. Puedo tener tantos checkbox como quiera.

¿Existe una solución para hacer esto sin poner una identificación en cada uno o desmarcar automáticamente todas las casillas de verificación y no la maestra?

aquí es mi código:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script> 
<script type="text/javascript"> 

    $(document).ready(function() { 
    $('#checkAll').click(function() { 
    if(!$('#master').is(':checked')) { return; 
    } $('input[type="checkbox"]').attr('checked', true); 
    }); 

    $('#checkNone').click(function() { 
    $('input[type="checkbox"]').attr('checked', false); }); 

    $('#master').click(function() { if($('#master').is(':checked')) { 
     return; } $('input[type="checkbox"]').attr('checked', false); 
    }); 
    $('input[type="checkbox"]').click(function() { 
    if(!$('#master').is(':checked')) { $(this).attr('checked', false); 
    } 
    }); 
    }); 

    </script> 
    </head> 

    <input type="checkbox" value="master" id="master">master 
    <span id="checkAll">All</span> 
    <span id="checkNone">None</span> 

    <input type="checkbox" value="1" id="c1">1 
    <input type="checkbox" value="2" id="c2">2 
    <input type="checkbox" value="3" id="c3">3 
    <input type="checkbox" value="4" id="c4">4 
    <input type="checkbox" value="5" id="c5">5 
+0

desactivar todas y vuelva a comprobar el maestro –

Respuesta

12

Sobre la base de su código, añadiría una envoltura alrededor de la casilla de verificación que desea seleccionar todo/nada y le dará la Identificación del envoltorio y entradas para seleccionar todos o ninguna.

$('#list input[type="checkbox"]').attr('checked', false);

o para jQuery 1.6+

$('#list input[type="checkbox"]').prop('checked', false);

De esta manera, se puede controlar todas las casillas sin afectar el "maestro" uno.

Aquí está el código:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script> 
<script type="text/javascript"> 

$(document).ready(function() { 
$('#checkAll').click(function() { 
    if(!$('#master').is(':checked')) { 
     return; 
    } 
    $('#list input[type="checkbox"]').attr('checked', true); 
}); 

$('#checkNone').click(function() { 
    $('#list input[type="checkbox"]').attr('checked', false); 
}); 

$('#master').click(function() { 
    if($('#master').is(':checked')) { 
     return; 
    } 
    $('#list input[type="checkbox"]').attr('checked', false); 
}); 
$('#list input[type="checkbox"]').click(function() { 
    if(!$('#master').is(':checked')) { 
     $(this).attr('checked', false); 
    } 
}); 
}); 

</script> 
</head> 

<input type="checkbox" value="master" id="master">master 
<span id="checkAll">All</span> 
<span id="checkNone">None</span> 

<div id="list"> 
<input type="checkbox" value="1">1 
<input type="checkbox" value="2">2 
<input type="checkbox" value="3">3 
<input type="checkbox" value="4">4 
<input type="checkbox" value="5">5 
</div> 
+0

lo que si tengo la lista múltiple y botones, que pueden crear tantas lista y botones puedo crear cada lista individualmente? –

+0

sí y puede llamar de forma dinámica en función de cuál marcó (maestro) si necesita –

+0

gracias por su código, funciona de la manera que lo necesitaba y puedo actualizarlo fácilmente para que coincida con mis necesidades –

6

Sólo se necesita una pequeña modificación para excluir de su maestro.

Usted puede hacer eso con un .no ("# maestro") así:

$('#checkNone').click(function() { 
    $('input[type="checkbox"]').not("#master").attr('checked', false); }); 
+1

así que si tengo múltiples listas y múltiples maestros tengo que poner como: no ('id1'). No ('id2 ') .not (' id3 '). not (' id4 ') ?? –

+1

No. Si todos esos maestros tienen una identificación que termina con 'maestro', puede simplemente excluirlos todos a la vez, así: no ("entrada [id $ = 'maestro']") – Tys

+0

O no ("entrada [id *] = 'master'] ") en caso de que esos id comiencen con 'master ..'. Consulte la selección de comodines de jQuery para obtener más detalles sobre esto. – Tys

Cuestiones relacionadas