jQuery verifica se sono state selezionate caselle di controllo o nessuna


126

So come vedere se una singola casella di controllo è selezionata o meno.

Ma ho problemi con quanto segue: dato un ID modulo devo vedere se una delle caselle di controllo è selezionata (cioè 1 o più) e devo vedere se nessuna è selezionata. Fondamentalmente ho bisogno di due funzioni separate che rispondano a queste due domande. L'aiuto sarebbe apprezzato. Grazie!

In realtà, avrei solo bisogno di una funzione per dirmi se nessuno è selezionato. Sapendo questo risponderebbe all'altra domanda.


Risposte:


246

Puoi usare qualcosa del genere

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

8
$("#formID input:checkbox:checked").lengthsarebbe sufficiente anche qui
Damon,

@Damon Immagino che volevi dire if ($("#formID input:checkbox:checked").length){}(senza il >0) sarebbe sufficiente perché 0 è un valore falso, vedi james.padolsey.com/javascript/truthy-falsey
Adrien Be

11
jQuery dice riguardo al :checkboxselettore :,For better performance in modern browsers, use [type="checkbox"] vedi api.jquery.com/checkbox-selector - lo stesso per i radiobutton tra l'altro, use [type="radio"] rather than :radio api.jquery.com/radio-selector
Adrien Be

27

JQuery .istesterà tutti gli elementi specificati e restituirà true se almeno uno di essi corrisponde al selettore:

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

Anche se is()sembra funzionare, avere :checkeddirettamente nel selettore come indicato nella risposta di @ rahul sembra più appropriato. is () sembra più utile quando "inside callbacks", vedi api.jquery.com/is . Oppure mi sfugge qualcosa?
Adrien Be,

No, è praticamente ciò che è scritto nei documenti: controlli se un elemento corrisponde all'attributo specificato. Applicarlo è come filtro e quindi verificare se si ottiene almeno un elemento nel risultato è lo stesso, ma è più lungo e non così espressivo.
Michael Logutov,

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

Vale a dire $("form input[type=checkbox]").is(":checked")potrebbe essere un approccio più semplice e più generico.
Adrien,

@AdrienBe L'utilizzo ispotrebbe comportare prestazioni migliori, poiché si interrompe non appena ne trova una.
ChrisW,

8

Puoi farlo:

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

Dove:

  • :checkbox selettore filtro seleziona tutte le caselle di controllo.
  • :checked selezionerà le caselle di controllo selezionate
  • length fornirà il numero di quelli controllati lì

jQuery dice riguardo al :checkboxselettore :,For better performance in modern browsers, use [type="checkbox"] vedi api.jquery.com/checkbox-selector
Adrien Be

6

Questo è ciò che ho usato per verificare se erano state modificate le caselle di controllo in un elenco di caselle di controllo:

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

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

         //Do something.

});     

6

Senza usare 'lunghezza' puoi farlo in questo modo:

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

3

Puoi fare un semplice ritorno di .lengthqui:

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

Questa ricerca di caselle di controllo nel modulo indicato, vede se ci sono :checkede restituisce truese lo sono (poiché la lunghezza sarebbe 0 altrimenti). Per renderlo un po 'più chiaro, ecco la versione convertita non booleana:

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

Ciò restituirebbe un conteggio di quanti sono stati controllati.


3

La risposta di Rahul è più adatta alla tua domanda. Ad ogni modo, se hai un gruppo di caselle da spuntare e non tutte le caselle nel tuo modulo, puoi farlo.

Inserisci un nome di classe per tutte le caselle di controllo che desideri controllare, ad esempio un nome di classe test_checke ora puoi verificare se una delle caselle di controllo è selezionata appartenendo al gruppo tramite:

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

Se restituisce true, supponi che una o più caselle di controllo siano selezionate con il nome di classe test_checke nessuna sia selezionata se restituisce false.

Spero che aiuti qualcuno. Grazie :)-


1

Questo è il modo migliore per risolvere questo problema.

  if($("#checkbox").is(":checked")){

  // Do something here /////

  };

Ciao, benvenuto su StackOverflow. Forse puoi descrivere un po 'di più la tua risposta, in quanto non è chiaro perché sia ​​il "modo migliore" per risolvere il problema.
dddJewelsbbb,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.