Zerko: Alle Checkboxen gleichzeitig markieren.., aber wie?

Moin Moin..

Ich habe mir eine Liste bzw. Tabelle zusammengestellt in welcher der User Orte über Checkboxen auswählen kann.

Die Checkboxen werden mit PHP dynamisch erzeugt :
echo "\r\t\t\t<input type="checkbox" name="chkLocation[]" value="".$elem[getLocation_Ident()]."">";

Wie man sehen kan lautet der Name [b]chkLocation[][/b] damit ich in der Verarbeitung mit PHP die ausgewählten Orte ansprechen kann.

Nun möchte ich dem User einen Button bzw. eine Checkbox zur verfügung stellen, welche alle Orte automatisch markiert?!

Leider weiß ich nicht wie ich alle Checkboxen über JavaScript ansprechen kann.
Beim ersten Versuch habe ich mir folgendes zusammen-gebastelt :

function CheckAllLocations(){
     for(i=0; i<chkLocation.length; i++)
        alert(document.FORMULAR.chkLocation[i].value);
     }
}

Leider funktioniert das nicht...
Kann mir jemand weiterhelfen?!

Gruß
zerko

  1. Die Checkboxen werden mit PHP dynamisch erzeugt :
    echo "\r\t\t\t<input type="checkbox" name="chkLocation[]" value="".$elem[getLocation_Ident()]."">";

    Dann lass sie PHP auch alle checken!

    Wenn der User den spezifischen button drückt, setzt er eine PHP Variable z.B.: $checked = true

    und dann musst du folgendes in deinen input tag einbauen:
    <input type="checkbox" .......
    <? if($checked){ echo "checked";} ?> >

    brauchst halt nen site reload....

    Lg
    Greedy Raccoon

    1. Danke.

      Dann lass sie PHP auch alle checken!
      Lg
      Greedy Raccoon

      Das würde gehen, jedoch muss ich dafür beim onClick Event der Checkbox einen form.submit(); auslösen...

      Die Lösung finde ich nicht so prickelnd..., denn eigentlich muss mein Beispiel auch funktionieren..

      Gruß
      zerko

  2. Hallo,

    dir hilft evtl. http://de.selfhtml.org/javascript/objekte/document.htm#get_elements_by_tag_name

    gruss

    --
    no strict;
    no warnings;
    79.78 cups of Coffee (Brewed) + Me = Death
    Kalorien sind winzig kleine nachtaktive Tiere, die unbeobachtet menschliche Kleidung enger nähen.
  3. Hallo Zerko,

    function CheckAllLocations(){
         for(i=0; i<chkLocation.length; i++)
            alert(document.FORMULAR.chkLocation[i].value);
         }
    }

    Leider funktioniert das nicht...

    Fehlermeldung?

    Es ist chkLocation innerhalb der Funktion überhaupt bekannt? Vielleicht geht es mit

      
          document.forms[0].elements[name].length;  
    
    

    (wobei ich "name" in derFunktion übergeben habe)

    Und dann hilft Dir vermutlich die Eigenschaft checked für Formularelemente.

    Gruß aus Köln-Ehrenfeld,

    Elya

    --
  4. Moin!

    Leider weiß ich nicht wie ich alle Checkboxen über JavaScript ansprechen kann.
    Beim ersten Versuch habe ich mir folgendes zusammen-gebastelt :

    function CheckAllLocations(){
         for(i=0; i<chkLocation.length; i++)
            alert(document.FORMULAR.chkLocation[i].value);
         }
    }

    Leider funktioniert das nicht...

    Liegt aber schon mal gar nicht so weit weg vom Schuß.

    In deine Master-Checkbox gehört

      
    <input type="checkbox" name="checkmaster" onclick="checkall(this,'chkLocation[]')">  
    
    

    Und deine Funktion macht:

      
    function checkall(masterbox, name)  
    {  
      f = masterbox.form; // ein Pointer zum Formular  
      for(i=0; i<f.elements.length;i++)  
      {  
        if (f.elements[i].name == name)  
        {  
          f.elements[i].checked = masterbox.checked;  
        }  
      }  
    }  
    
    

    Die Schleife geht alle Elemente deines Formulares durch. Stimmt der Name eines Elements überein, wird die Eigenschaft "checked" der Masterbox übertragen an das Element. So kriegst du den Zustand gewählt/nichtgewählt des Masterbox übertragen.

    Das nackte "this" im Funktionsaufruf von onclick ist übrigens sehr wichtig und eine der besten, weil sehr arbeitserleichternden Funktionen in Javascript. Es liefert dir immer das Element mit, in dem der Aufruf erfolgte. In diesem Fall also das Formularelement "checkmaster". Von diesem Element aus kannst du (vgl. die Objektreferenz http://de.selfhtml.org/javascript/objekte/elements.htm#form) beispielsweise wieder zum umgebenden Formular gelangen. Das wird in der Funktion checkall ausgenutzt in der ersten Zeile. Auf diese Weise muß man nicht extra den Namen des Formulars, in dem sich die Checkboxen befinden, mit übergeben.

    Einen kleinen Nachteil hat die Funktion jetzt noch: Wenn sie auf Formularelemente trifft, die keine Checkboxen sind, die aber trotzdem wie gesucht heißen, wird es einen Fehler geben, wenn man diese nicht "checked" machen kann (Textfelder beispielsweise).

    Und zur Abhängigkeit von Javascript: Dein auswertendes Skript erhält zusätzlich zu allen gewählten Checkboxen natürlich auch den Zustand der Masterbox, kann also im Zweifel basierend auf dieser Box die Verarbeitung von "allem" anstoßen.

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!
    1. Hallo,

      Einen kleinen Nachteil hat die Funktion jetzt noch: Wenn sie auf Formularelemente trifft, die keine Checkboxen sind, die aber trotzdem wie gesucht heißen, wird es einen Fehler geben, wenn man diese nicht "checked" machen kann (Textfelder beispielsweise).

      Dem Elementknoten wird einfach eine Boolean-Eigenschaft angehängt. Das sollte nicht notwendigerweise zu einem Fehler führen. Die meisten Browser machen das umstandslos.

      Mathias