2010-11-13 2 views
6

Considerate questo semplice codice di esempio:Come controllare tutte le check in forma corrente con jquery?

<form name="text" id="frm1" method="post"> 
    <input type="checkbox" name="name[]" value="1000"> Chk1<br> 
    <input type="checkbox" name="name[]" value="1001"> Chk2<br> 
    <input type="checkbox" name="name[]" value="1002"> Chk3<br> 
    <input type="checkbox" name="name[]" value="1003"> Chk4<br> 
    <input type="checkbox" id="select_all"/> Select All<br> 
</form> 

<form name="text" id="frm2" method="post"> 
    <input type="checkbox" name="name[]" value="4000"> Chk1<br> 
    <input type="checkbox" name="name[]" value="4001"> Chk2<br> 
    <input type="checkbox" name="name[]" value="4002"> Chk3<br> 
    <input type="checkbox" name="name[]" value="4003"> Chk4<br> 
    <input type="checkbox" id="select_all"/> Select All<br> 

Sto cercando di ottenere Seleziona tutto per lavorare in ogni forma (forme sono generati dinamicamente nel mio codice di produzione e hanno diverse, nomi diversi)

Sto usando questa jquery ma select_all funziona solo per la prima forma; non ha effetto sui moduli sotto il primo.

Non riesco a capire come selezionare Tutte le caselle in qualsiasi: casella di controllo contenuta nell'ID modulo.

Qualcuno può indicarmi la giusta direzione?

Molte grazie

+0

spudorato: controllare il mio [plugin per jQuery checkall] (https://github.com/mjball/jQuery-CheckAll) (sto ancora lavorando sulla documentazione) –

risposta

8

si dispone di più elementi con lo stesso ID, che è valido HTML ed è la causa del problema che stai vedendo. Cambia id="select_all" a class="select_all" e $('#select_all') a $('.select_all') e dovresti essere bravo.

+1

Se solo potessi reclamare l'ultima ora e mezza di ricerca su google. – Chris

0

Gli ID sono unici. Ne hai due. Se desideri più elementi, utilizza class="select_all" e $('.select_all')

1

Hai due elementi con ID select_all; non è permesso. Cambiamento che a una classe e provare questo:

$('.select_all').change(function() { 
    var checkboxes = $(this).closest('form').find(':checkbox'); 
    checkboxes.attr('checked', $(this).is(':checked')); 
}); 
+1

Non c'è bisogno di usare '.is (': checked')' perché si può semplicemente ispezionare la proprietà '.checked' della casella di controllo. Nessun punto con una chiamata jQuery extra – Gareth

+1

Eh, jQuery è economico. È improbabile che questo sarà un collo di bottiglia. – kevingessner

0
$('#select_all').click(function() { 
    $("input:checkbox", $(this).closest('form')).attr("checked", this.checked) 
}); 

Tuttavia, è necessario un solo elemento con id select_all per questo al lavoro. Se è possibile modificare a una classe di select_all poi basta sostituire il # con una . e siete pronti ad andare

0

Prova questa:

$("#select_all").click(function()    
     { 
      var checked_status = this.checked; 
      $("input[@name=name]").each(function() 
      { 
       this.checked = checked_status; 
      }); 
     }); 
+0

Assicurati anche di avere una classe "select_all" invece di due ID. – cosmoonot

+0

Questo non aiuterà. Il problema è l'ID duplicato. E quindi selezionerà * tutte * le caselle di controllo di * tutti * i moduli. –

+0

Sì, ho capito che dopo aver pubblicato il codice. Si prega di visualizzare la prima risposta, dovrebbe risolvere il tuo problema. – cosmoonot

0

non è possibile avere due elementi con lo stesso ID. example

html:

<form name="text" id="frm1" method="post"> 
    <input type="checkbox" name="name[]" value="1000"> Chk1<br> 
    <input type="checkbox" name="name[]" value="1001"> Chk2<br> 
    <input type="checkbox" name="name[]" value="1002"> Chk3<br> 
    <input type="checkbox" name="name[]" value="1003"> Chk4<br> 
    <input type="checkbox" id="select_all_1"/> Select All<br> 
</form> 

<form name="text" id="frm2" method="post"> 
    <input type="checkbox" name="name[]" value="4000"> Chk1<br> 
    <input type="checkbox" name="name[]" value="4001"> Chk2<br> 
    <input type="checkbox" name="name[]" value="4002"> Chk3<br> 
    <input type="checkbox" name="name[]" value="4003"> Chk4<br> 
    <input type="checkbox" id="select_all_2"/> Select All<br> 
</form> 

JS:

$(function() { 

    $('#select_all_1, #select_all_2').bind('click', function(event) { 

     var 
      ref = this, 
      refChecked = this.checked; 

     $(this.form).find('input[type="checkbox"]').each(function(i, el) { 
      if(this != ref) 
       this.checked = refChecked; 
     }); 

    }); 

});