2012-01-03 12 views
15

Ho una casella di controllo per selezionare tutti i problemi. Ho più caselle di controllo che possono essere attivate da una principale.jQuery checkbox: seleziona tutti/nessuno tranne uno

Se è il controllo principale, è possibile selezionare qualsiasi casella di controllo (che funziona). Ora il mio problema è quando controllo "nessuno" tutti sono andati anche il master

Quello che mi serve è non deselezionare il master. Posso avere tutte le caselle che voglio.

Esiste una soluzione per farlo senza inserire un ID o deselezionare automaticamente tutte le caselle di controllo e non quella principale?

Ecco il mio codice:

<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

deselezionare tutto poi ricontrollare il maestro –

risposta

12

Sulla base di codice, vorrei aggiungere un wrapper la casella di controllo che si desidera selezionare tutti/nessuno e poi dare l'id involucro e gli ingressi per selezionare tutti o nessuna.

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

o per jQuery 1.6+

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

In questo modo, è possibile controllare tutte le caselle di controllo senza influenzare il "master" uno.

Ecco il codice:

<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

quindi se ho lista e Tasti multipli, posso creare il maggior numero nell'elenco e pulsanti posso creare ogni elenco singolarmente? –

+0

sì e puoi chiamare dinamicamente in base a quale hai controllato (master) se hai bisogno di –

+0

grazie per il tuo codice, funziona nel modo in cui ne avevo bisogno e posso facilmente aggiornarlo per soddisfare le mie esigenze –

6

Hai solo bisogno di una piccola modifica per escludere il tuo padrone.

Potete farlo con un .non ("# master") come questo:

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

quindi se ho più liste e più master devo mettere come: not ('id1'). Not ('id2 ') .non (' ID3 '). non (' ID4') ?? –

+1

No. Se tutti questi master hanno un ID che termina con "master", puoi semplicemente escluderli tutti in una volta, in questo modo: not ("input [id $ = 'master']") – Tys

+0

oppure .not ("input [id * = 'master'] ") nel caso in cui l'id inizi con 'master ..'. Vedi la selezione jQuery jolly per maggiori dettagli su questa roba. – Tys

Problemi correlati