Marco: nur bestimmte checkboxen beachten

Hallo,

habe folgende for-Schleife:

for (var i=0;i<document.orderform.length;++i) {
  if (document.orderform.elements[i].id=="sw".checked) {
    { KeyDw = KeyDw + 1.9001; }{ xKeyDw = xKeyDw + 1; }}
}

und folgende mehrere Checkboxen:

<input class="chbox" onclick="tally()" type="checkbox" name="sw[]" id="sw" value="textblublabli" >
<input class="chbox" onclick="tally()" type="checkbox" name="sw[]" id="sw" value="text1blabla" >
...

Beim Ankreuzen soll also 1.9001 dazu gezählt werden. Passiert aber nicht. Ich vermute, daß meine if-Anweisung nicht stimmt. Wenn ich '.id=="sw"' weglasse, funktionierts zwar, aber er beachtet auch andere Checkboxen im Formular, was nicht sein soll. Nur Checkboxen mit dem Namen sw[] oder der id "sw" sollen beachtet werden.

Danke für die Hilfe im Voraus.

  1. Hi Marco,

    Ids dürfen dokumentweit nur einmal vergeben werden.
    Möglicherweise liegt darin schon der Hundbegraben.

    Gruß

    Kurt

    --
    Nein, ich beantworte keine Anfragen per e-mail.
    ss:( zu:) ls:[ fo:) de:] va:| ch:| sh:( n4:° rl:( br:? js:| ie:% fl:( mo:?
    "Andere beherrschen erfordert Kraft. Sich selbst beherrschen fordert Staerke."  (Laotse; chin. Philosoph; 4.-3. Jh. v. Chr.)
    http://elektro-dunzinger.at
    http://shop.elektro-dunzinger.at
  2. Hallo Marco.

    Zuersteimal solltest du wissen, dass du ids dokumentweit nur einmal vergeben darfst.
    Tatsächliegt in der if-Abfrage der haupt-Fehler:
    Du probierst mit

    if (document.orderform.elements[i].id=="sw".checked) {

    gleich zwei Überprüfungen auf einmal vorzunehmen. Statt deiner syntaktisch falschen Schreibweise musst du zwei Abfragen mit '&&' (und) verknüpfen. Das sieht dann in etwa so aus:

    function tally() {
      var KeyDw = 0;
      for (var i=0;i<document.orderform.length;++i) {
        if ((document.orderform.elements[i].name == "sw[]") && (document.orderform.elements[i].checked)) {
          KeyDw = KeyDw + 1;
        }
      }
      alert(KeyDw);
    }

    <input class="chbox" onclick="tally()" type="checkbox" name="sw[]" value="text1">
    <input class="chbox" onclick="tally()" type="checkbox" name="sw[]" value="text2">
    ...

    Mir ist außerdem folgende Zeile aufgefallen:
    if [...] {
      { KeyDw = KeyDw + 1.9001; }{ xKeyDw = xKeyDw + 1; }
    }
    Ich weiß nicht, ob das nur beim Testen entstanden ist, auf jeden Fall sind die geschweiften Klammern pro Befehl überflüssig.

    Grüsse,
      Christian

    --
    Erfahrung ist die Summe der Dummheiten, die man im Bedarfsfall wieder anwendet. (Dieter Hildebrand, Kabarettist)
    1. Danke Christian,

      funktioniert nun einwandfrei.

      Die id hatte ich deshalb an alle checkboxen verteilt, weil ich per javascript "Alle Markieren" und "keine markieren" und "Markierung umkehren" realisiert hatte. Das funktioierte trotz mehrfach gleich vergebener id's einwandfrei. Habe es aber gleich in .name=="sw[]" abgeändert und es funktioiert natürlich auch. Danke.