2010-11-13 3 views
6

Betrachten Sie diesen einfachen Beispiel-Code:Wie überprüft man alle Checkboxen in der aktuellen Form mit 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> 

Alles, was ich zu bekommen habe versucht Wählen Sie in jeder Form zu arbeiten (Formulare sind in meinem Produktionscode dynamisch generiert und haben unterschiedliche, unterschiedliche Namen)

Ich benutze diese jquery aber Select_all funktioniert nur für die erste Form; Es hat keine Auswirkungen auf Formulare unter dem ersten.

Ich kann nicht herausfinden, wie alle Checkboxen in jedem Kontrollkästchen in der Form ID Check.

Kann mir jemand in die richtige Richtung zeigen?

Vielen Dank

+0

Shameless Stecker: check out my [jQuery CheckAll Plugin] (https://github.com/mjball/jQuery-CheckAll) (arbeite noch an der Dokumentation) –

Antwort

8

Sie haben mehrere Elemente mit der gleichen ID, die ungültige HTML und ist das Problem verursacht Sie sehen. Ändern Sie id="select_all" zu class="select_all" und $('#select_all') zu $('.select_all'), und Sie sollten gut sein.

+1

Wenn ich nur die letzten anderthalb Stunden von Google Search zurückfordern könnte. – Chris

0

IDs sind eindeutig. Du hast zwei. Wenn Sie mehrere Elemente haben möchten, verwenden Sie class="select_all" und $('.select_all')

1

Sie haben zwei Elemente mit der ID select_all; das ist nicht erlaubt. Ändern Sie diesen auf eine Klasse und versuchen Sie dies:

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

Es ist nicht nötig, '.is (': checked')' 'zu verwenden, da Sie einfach die '.checked'-Eigenschaft des Kontrollkästchens überprüfen können. Kein Punkt mit einem zusätzlichen jQuery Anruf – Gareth

+1

Eh, jQuery ist billig. Es ist unwahrscheinlich, dass das ein Flaschenhals sein wird. – kevingessner

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

Allerdings müssen Sie nur ein Element mit id select_all für diese arbeiten. Wenn Sie zu einer Klasse von select_all ändern können, dann ersetzen Sie einfach den # mit einem . und du bist gut zu gehen

0

Try this:

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

Stellen Sie außerdem sicher, dass Sie eine Klasse "select_all" anstelle von zwei IDs haben. – cosmoonot

+0

Das wird nicht helfen. Das Problem ist die doppelte ID. Und dann wird es * alle * Kontrollkästchen von * allen * Formen auswählen. –

+0

Ja, das merkte ich nach dem Posten des Codes. Bitte sehen Sie die erste Antwort, es sollte Ihr Problem lösen. – cosmoonot

0

Sie nicht zwei Elemente mit der gleichen ID haben. 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; 
     }); 

    }); 

}); 
Verwandte Themen