2010-04-21 20 views
48

Ho il seguente modulo HTML e può avere molte caselle di controllo. Quando si fa clic sul pulsante di invio, desidero che l'utente visualizzi un avviso javascript per verificare almeno una casella di controllo se nessuno è selezionato. C'è un modo semplice per farlo usando Jquery?Jquery - controlla se almeno una casella di controllo è selezionata

<form name = "frmTest" id="frmTest"> 
    <input type="checkbox" value="true" checked="true" name="chk[120]"> 
    <input type="checkbox" value="true" checked="true" name="chk[128]"> 
    <input type="checkbox" name="chk[130]"> 
    <input type="checkbox" name="chk[143]"> 
    <input type="submit" name="btnsubmit" value="Submit"> 
</form> 
+3

Si sarebbe probabilmente meglio con ''. Si noti inoltre che il ** solo ** valore accettabile per l'attributo verificato è "controllato". 'checked =" true "' è un errore. – Quentin

risposta

29
$('#frmTest input:checked').length > 0 
+0

$ ('#frmTest: checkbox'). Length> 0 sarebbe meglio controllare tra un certo numero di checkbox. – Kasturi

+1

Perché i pulsanti radio dovrebbero essere migliori? Se l'OP desidera * almeno * un'opzione selezionata, i pulsanti di opzione lo limiterebbero a * al massimo *. –

+1

@David, ho rimosso quel suggerimento. –

17
$("#frmTest").submit(function(){ 
    var checked = $("#frmText input:checked").length > 0; 
    if (!checked){ 
     alert("Please check at least one checkbox"); 
     return false; 
    } 
}); 
82
if(jQuery('#frmTest input[type=checkbox]:checked').length) { … } 
+1

: il check restituisce già un valore booleano, quindi non è necessaria la lunghezza. true.length e false.length forniscono entrambi un valore non definito – Jan

+12

@Jan - 'jQuery ('#frmTest input [type = checkbox]: checked')' restituisce un oggetto jQuery contenente tutti gli elementi che corrispondono al selettore. Non restituisce un valore booleano. Potresti confonderlo con 'HTMLInputElement.checked'. – Quentin

4
$('#frmTest').submit(function(){ 
    if(!$('#frmTest input[type="checkbox"]').is(':checked')){ 
     alert("Please check at least one."); 
     return false; 
    } 
}); 

è (': checked') restituisce true se almeno una o più caselle di controllo siano selezionate.

+0

E 'possibile che questo controlli i clic in live box? – Robert

+0

Sì, ma si utilizzerà un gestore di eventi diverso. Vedi questo: http://stackoverflow.com/questions/3442322/jquery-checkbox-event-handling – namklabs

7
$("#show").click(function() { 
    var count_checked = $("[name='chk[]']:checked").length; // count the checked rows 
     if(count_checked == 0) 
     { 
      alert("Please select any record to delete."); 
      return false; 
     } 
     if(count_checked == 1) { 
      alert("Record Selected:"+count_checked); 

     } else { 
      alert("Record Selected:"+count_checked); 
      } 
}); 
+0

Non funziona per me, qualcosa è cambiato in come jQuery gestisce l'evento selezionato? – Envayo

0

$('#fm_submit').submit(function(e){ 
 
    e.preventDefault(); 
 
    var ck_box = $('input[type="checkbox"]:checked').length; 
 
    
 
    // return in firefox or chrome console 
 
    // the number of checkbox checked 
 
    console.log(ck_box); 
 

 
    if(ck_box > 0){ 
 
     alert(ck_box); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form name = "frmTest[]" id="fm_submit"> 
 
    <input type="checkbox" value="true" checked="true" > 
 
    <input type="checkbox" value="true" checked="true" > 
 
    <input type="checkbox" > 
 
    <input type="checkbox" > 
 
    <input type="submit" id="fm_submit" name="fm_submit" value="Submit"> 
 
</form> 
 
<div class="container"></div>

+0

Corretti alcuni errori di battitura per far funzionare la demo. –

Problemi correlati