Christian: Rechnen mit Checkboxen

Hallo zusammen,

auf einer Seite habe ich mehrere Checkboxen. Pro Checkbox wird ein Wert von 2 vergeben; aktiviert man zwei Checkboxen, hat man einen Wert von 4, bei 8 Checkboxen würde dieser 16 betragen usw. Momentan befinden sich 10 Checkboxen auf der Seite, es können aber auch mehr werden.

Das Zusammenrechnen der aktivierten Checkboxen habe ich bisher für jede Checkbox einzeln durchgeführt. Und zwar so:

--
    var gebuehr = 2;

if (document.liste.elements["liste[]"][0].checked != true) {
        var liste0_ja = 0; }
    else {
        var liste0_ja = gebuehr; }

if (document.liste.elements["liste[]"][1].checked != true) {
        var liste01_ja = 0; }
    else {
        var liste01_ja = mon_gebuehr; }

...
    ...
    ...

document.liste.gebuehr.value = (liste0_ja + liste01_ja + ",- EUR");
    window.setTimeout('berechnen()',100);
--

Das funktioniert auch wunderbar - ist allerdings sehr unpraktisch. Gerade wenn eine Checkbox entfernt oder neu hinzugefügt wird, muss man alle entsprechenden Aufrufe durchackern und anpassen.

Ich suche daher nach einer Lösung, die das Ganze vereinfacht. Vielleicht mit Arrays? Oder gibt es andere Möglchkeiten?
Hat jemand Tipps oder Hinweise?
Ihr seht schon, in JavaScript kenne ich mich kaum aus ...

Gruß und Danke,

  • Christian -
  1. var gebuehr = 2;

    var summe = 0;
    for ( i=0; i < document.liste.elements["liste[]"].length; i++ ) {
      if (document.liste.elements["liste[]"][i].checked ) summe = summe + gebuehr;
    }

    Habe ich nicht getestet, soll nur als Idee dienen

    Kalle,

    1. Hallo Kalle,

      var summe = 0;
      for ( i=0; i < document.liste.elements["liste[]"].length; i++ ) {
        if (document.liste.elements["liste[]"][i].checked ) summe = summe + gebuehr;
      }

      Habe ich nicht getestet, soll nur als Idee dienen

      Funktioniert wunderbar. Vielen Dank!

      Gruß,

      • Christian -
  2. Hi,

    var gebuehr = 2;

    if (document.liste.elements["liste[]"][0].checked != true) {

    ^^^^^^^^^^^^^^
                versteh ich nicht ganz, wie sieht das HTML aus?

    var liste0_ja = 0; }
        else {
            var liste0_ja = gebuehr; }

    if (document.liste.elements["liste[]"][1].checked != true) {
            var liste01_ja = 0; }
        else {
            var liste01_ja = mon_gebuehr; }

    ^^^^
    nochma ne andere gebühr??

    ne schleife sollte gute Dienste leisten,
    vielleicht so:

    var gesamtgebuehr=0;

    for(var i=0;i<document.liste.elements["liste[]"].length;i++)
    {
    if(document.liste.elements["liste[]"][i].checked==true)
    {gesamtgebuehr=gesamtgebuehr+2;}
    }

    alert(gesamtgebuehr);

    gruß
    peter

    1. Hallo peter,

      if (document.liste.elements["liste[]"][0].checked != true)
                                         ^^^^^^^^^^^^^^
         versteh ich nicht ganz, wie sieht das HTML aus?

      <input type="checkbox" name="liste[]" value="Liste1" />
      <input type="checkbox" name="liste[]" value="Liste2" />
      ...
      ...

      Das dazugehörige Formular wird später mit PHP verarbeitet. Trotzdem wollte ich mit JavaScript die Checkboxen abfragen (mindestens eine muss aktiviert sein).

      var liste01_ja = mon_gebuehr; }
                                  ^^^^
         nochma ne andere gebühr??

      Nein, "Übertragungsfehler"? ;)

      ne schleife sollte gute Dienste leisten,
      vielleicht so:
      var gesamtgebuehr=0;

      for(var i=0;i<document.liste.elements["liste[]"].length;i++)
      {
      if(document.liste.elements["liste[]"][i].checked==true)
      {gesamtgebuehr=gesamtgebuehr+2;}
      }

      Super, vielen Dank. Funktioniert.
      Jetzt habe ich die Qual der Wahl, denn auch die Version von Kalle ist  genau richtig. :)

      Gruß,

      • Christian -