2010-11-03 24 views
98

So come verificare se una casella di controllo è selezionata o meno.jQuery verifica se sono selezionate caselle di controllo o nessuna

Ma Im avere problemi con la seguente - dato una forma id ho bisogno di vedere se qualsiasi delle caselle di controllo sono selezionati (cioè 1 o più), e ho bisogno di vedere se nessuno sono selezionati. Fondamentalmente ho bisogno di due funzioni separate che rispondono a queste due domande. L'aiuto sarebbe apprezzato Grazie!

In realtà, avrei solo bisogno di una funzione per dirmi se nessuno sono selezionati. Sapendo questo risponderebbe l'altra domanda.

+0

correlati http://stackoverflow.com/questions/901712/check-checkbox-checked-property-using-jquery –

risposta

192

Si può usare qualcosa di simile

if ($("#formID input:checkbox:checked").length > 0) 
{ 
    // any one is checked 
} 
else 
{ 
    // none is checked 
} 
+6

'$ (" # formID inpu t: checkbox: spuntato "). length' sarebbe sufficiente anche qui – Damon

+1

jQuery doc http://api.jquery.com/checked-selector/ –

+0

@Damon Immagino tu intendessi" if "($ (" # formID input: checkbox: checked "). length) {}' (senza '> 0') sarebbe sufficiente perché 0 è un valore falso, vedi http://james.padolsey.com/javascript/truthy-falsey/ –

6

Si può fare questo:

if ($('#form_id :checkbox:checked').length > 0){ 
    // one or more checkboxes are checked 
    } 
    else{ 
    // no checkboxes are checked 
    } 

Dove:

  • :checkbox selettore filtro seleziona tutti casella di controllo.
  • :checked selezionerà controllato caselle
  • length darà il numero di quelli controllato là
+0

jQuery dice riguardo al selettore ': checkbox':' Per prestazioni migliori nei browser moderni, usa la casella [type = " "]', vedi http://api.jquery.com/checkbox-selector/ –

3

Si può fare un semplice ritorno del .length qui:

function areAnyChecked(formID) { 
    return !!$('#'+formID+' input[type=checkbox]:checked').length; 
} 

Questo cerca caselle di controllo nel modulo specificato, vede se ci sono :checked e restituisce true se lo sono (poiché la lunghezza sarebbe 0 altrimenti). Per rendere un po 'più chiaro, ecco il non booleano convertito versione:

function howManyAreChecked(formID) { 
    return $('#'+formID+' input[type=checkbox]:checked').length; 
} 

Ciò restituire un conteggio di quanti sono stati controllati.

21

JQuery .is metterà alla prova tutti gli elementi specificati e restituisce true se almeno uno di essi corrisponde selettore:

if ($(":checkbox[name='choices']", form).is(":checked")) 
{ 
    // one or more checked 
} 
else 
{ 
    // nothing checked 
} 
+0

Anche se 'is()' sembra funzionare, avendo ': checked' direttamente nel selettore come indicato nella risposta di @ rahul sembra più appropriato. è() sembra più utile quando "all'interno di callback", vedi http://api.jquery.com/is/. O mi sta sfuggendo qualcosa? –

+0

No, è praticamente ciò che viene scritto nei documenti: si controlla se un elemento corrisponde all'attributo specificato. Applicare come filtro e verificare se si ottiene almeno un elemento in risultato è lo stesso, ma più lungo e non così espressivo. –

+0

+1 per il fatto che '.is (": checked ")' nella tua soluzione è più espressivo, non sono sicuro del resto. –

2

risposta di Rahul è misura migliore per la tua domanda. Ad ogni modo, se hai un gruppo di checkbox da controllare e non tutta la checkbox nel tuo modulo, puoi farlo.

Mettere un nome di classe per tutte le caselle di controllo che si desidera controllare, diciamo per esempio, un nome di classe test_check e ora si può verificare se una delle casella è selezionata appartenente al gruppo da:

$("#formID .test_check:checked").length > 0 

Se restituisce true, presuppone che una o più caselle di controllo siano contrassegnate con il nome di classe test_check e nessuno selezionato se restituisce false.

Spero che aiuti qualcuno.Grazie:) -

1

Questo è quello che ho usato per controllare se le eventuali caselle in un elenco di caselle di controllo erano cambiate:

$('input[type="checkbox"]').change(function(){ 

     var itemName = $('select option:selected').text(); 

     //Do something. 

});  
0

Senza usare 'lunghezza' si può fare in questo modo:

if ($('input[type=checkbox]').is(":checked")) { 
     //any one is checked 
} 
else { 
//none is checked 
} 
Problemi correlati