Konrad Herzog: CheckBox onClick soll Summe von Werten ergeben

Hallo zusammen

Ich brauche bei einer CheckBox Liste eine Summe von Werten.
Ist die CheckBox checked, soll der Betrag zum Total hinzu-
kommen, sonst soll er nicht dabei sein (logischerweise).
Mein Versuch (anhand eines Scripts, das ich gefunden habe)
addiert nun manchmal richtig, manchmal nicht und ich finde
den Fehler einfach nicht. So sieht das bis jetzt aus:

<script language="JavaScript">
<!--
function addition(myValue){

var std = myValue; // Betrag, der dazugezählt werden soll
var summe = 0; // Anfangsbetrag

for(i=0; i < document.myForm.ArtikelCheckListe.length; i++){

if(document.myForm.ArtikelCheckListe[i].type == 'checkbox' && document.myForm.ArtikelCheckListe[i].checked != ''){
summe = summe + Number(std);
}
}
document.RetourenForm.result.value = summe;
}
//-->
</script>

<form name="myForm" action="save.asp" method=post>
<input onClick="addition(48);" type="checkbox" name="ArtikelCheckListe" value="blabla1">
<input onClick="addition(23);" type="checkbox" name="ArtikelCheckListe" value="blabla2">
<input onClick="addition(16);" type="checkbox" name="ArtikelCheckListe" value="blabla3">
<input type=text id="result" readOnly>
</form>

Bin für jede Hilfe dankbar...

  1. Hallo,

    wenn ich es richtig sehe, spielt sich alles innerhalb eines forms ab, und das Teil heisst "myForm" und nicht "RetourenForm".

    function addition(myValue){

    var std = myValue; // Betrag, der dazugezählt werden soll
     var summe = 0; // Anfangsbetrag

    var frm=document.myForm;  // diese Variable macht es einfacher

    for(i=0; i < frm.ArtikelCheckListe.length; i++){

    if(frm.ArtikelCheckListe[i].type == 'checkbox' &&   frm.ArtikelCheckListe[i].checked != ''){
       summe = summe + Number(std);
       }
      }
     frm.result.value = summe;
     }

    Gruß plan_B

    --
         *®*´¯`·.¸¸.·
    1. Korrektur:

      if(frm.ArtikelCheckListe[i].type == 'checkbox' &&   frm.ArtikelCheckListe[i].checked != ''){

      checked ist in js vom Typ boolean, deswegen

      if(frm.ArtikelCheckListe[i].type == 'checkbox' &&   frm.ArtikelCheckListe[i].checked ){

      Gruß plan_B

      --
           *®*´¯`·.¸¸.·
  2. Hallo,

    Mein Versuch (anhand eines Scripts, das ich gefunden habe)
    addiert nun manchmal richtig, manchmal nicht und ich finde
    den Fehler einfach nicht. So sieht das bis jetzt aus:

    soll das Script schon mal funktioniert haben? egal ob  nun ein Kreuz gesetzt oder gelöscht wird, findet die Addition statt, d.h. im Endeffekt:

    myForm.result.value=myValue;

    so einfach wie ich anfangs dachte, ist es doch nicht ....

    Gruß plan_B

    --
         *®*´¯`·.¸¸.·
  3. Hallo

    wenn ich es richtig sehe, spielt sich alles innerhalb eines
    forms ab, und das Teil heisst "myForm" und nicht "RetourenForm".

    War nur ein Übertragungsfehler,  Sorry...

    soll das Script schon mal funktioniert haben?

    Es funktioniert, aber seltsam. Habe hier mal ein Beispiel, wie weit
    das Ding seine Arbeit tut:

    <script language="JavaScript">
    <!--
    function addition(myValue){

    var std = myValue; // Der Betrag der dazugezählt werden soll
     var summe = 0; // Der Anfangsbetrag

    var frm=document.RetourenForm;

    for(i=0; i < frm.ArtikelCheckListe.length; i++){

    if(frm.ArtikelCheckListe[i].type == 'checkbox' && frm.ArtikelCheckListe[i].checked ){
      summe = summe + Number(std);
     }
     }
     frm.result.value = summe;
    }
    //-->
    </script>

    <form name="RetourenForm" action="save.asp" method=post>
     <input onClick="addition(24);" type="checkbox" name="ArtikelCheckListe" value="593280">
    --> onclick frm.result.value = 24
     <input onClick="addition(24);" type="checkbox" name="ArtikelCheckListe" value="593281">
    --> onclick frm.result.value = 48
     <input onClick="addition(24);" type="checkbox" name="ArtikelCheckListe" value="593282">
    --> onclick frm.result.value = 72
     <input onClick="addition(24);" type="checkbox" name="ArtikelCheckListe" value="593283">
    --> onclick frm.result.value = 96
     <input onClick="addition(24);" type="checkbox" name="ArtikelCheckListe" value="593284">
    --> onclick frm.result.value = 120
     <input onClick="addition(24);" type="checkbox" name="ArtikelCheckListe" value="593285">
    --> onclick frm.result.value = 144
     <input onClick="addition(24);" type="checkbox" name="ArtikelCheckListe" value="593286">
    --> onclick frm.result.value = 168

    So weit eigentlich alles, wie es sein soll. Auch wenn man Häckchen
    entfernt werden die Beträge sauber wieder subtrahiert. Aber dann
    kommt das grosse Rätsel:

    <input onClick="addition(46);" type="checkbox" name="ArtikelCheckListe" value="593287">
    --> onclick frm.result.value = 368 ???
     <input onClick="addition(23);" type="checkbox" name="ArtikelCheckListe" value="593288">
    --> onclick frm.result.value = 207 ???
    </form>

    checked ist in js vom Typ boolean

    --> hat nicht geholfen.

    1. Hallo,

      soll das Script schon mal funktioniert haben?

      Es funktioniert, aber seltsam.

      dann würde ich dir raten, doch Struppi's elegante Version zu verwenden, und die deinen Bedürfnissen anzupassen.

        
      <form name="myForm" action="save.asp" method=post>  
      <input onClick="addition(this,24);" type="checkbox" name="ArtikelCheckListe" value="593286">  
       <input onClick="addition(this,46);" type="checkbox" name="ArtikelCheckListe" value="593287">  
       <input onClick="addition(this,23);" type="checkbox" name="ArtikelCheckListe" value="593288">  
      <input type=text name="result" readOnly>  
      </form>  
        
      <script type="text/javascript">  
      [code lang=javascript]  
      function addition(el,wert){  
       var summe = 0; // Anfangsbetrag  
       el.value2=wert;  
        
       var liste = el.form[el.name]; // Die Liste aller Checkboxen mit dem Namen  
       for(var i = 0; i < liste.length; i++)  
          summe +=  (liste[i].checked && liste[i].value2) ? liste[i].value2 : 0;  
       el.form.result.value = summe;  
      }
      

      </script>[/code]

      Gruß plan_B

      --
           *®*´¯`·.¸¸.·
      1. dann würde ich dir raten, doch Struppi's elegante Version zu
        verwenden, und die deinen Bedürfnissen anzupassen.

        Und genau das hat mir weitergeholfen! Problem gelöst, vielen
        Dank euch allen für eure Hilfe!

        Gruss
        Konrad "Nie mehr wieder Javascript" Herzog

        1. Konrad "Nie mehr wieder Javascript" Herzog

          Och

          Struppi.

          --
          Javascript ist toll (Perl auch!)
  4. <script language="JavaScript">

    Das language Attribut ist veraltet und das notwendige type Attribut fehlt.

    <!--

    Ein HTML Kommentar im Skriptblock ist veraltet ausser für Browser der allerersten Gerneration nicht notwendig.

    Das ganez ließe sich einfacher umsetzen.

    <form name="myForm" action="save.asp" method=post>  
    <input onClick="addition(this);" type="checkbox" name="ArtikelCheckListe" value="48">  
    <input onClick="addition(this);" type="checkbox" name="ArtikelCheckListe" value="23">  
    <input onClick="addition(this);" type="checkbox" name="ArtikelCheckListe" value="16">  
    <input type=text name="result" readOnly>  
    </form>  
      
    <script type="text/javascript">  
    
    ~~~~~~javascript
    function addition(el){  
      
     var summe = 0; // Anfangsbetrag  
     var liste = el.form[el.name]; // Die Liste aller Checkboxen mit dem Namen  
     for(var i = 0; i < liste.length; i++) summe += parseInt( liste[i].checked ? liste[i].value  : 0);  
     el.form.result.value = summe;  
    }
    ~~~`</script>`{:.language-html}  
      
    Struppi.
    
    -- 
    [Javascript ist toll](http://javascript.jstruebig.de/) (Perl auch!)
    
    1. Hi Struppi

      Das ganez ließe sich einfacher umsetzen.

      Danke für den Tipp. Nur ist ja gerade mein grosses Problem,
      dass value=".." schon von einer ID besetzt ist, die ich un-
      bedingt übergeben muss...

      1. hi,

        Danke für den Tipp. Nur ist ja gerade mein grosses Problem,
        dass value=".." schon von einer ID besetzt ist, die ich un-
        bedingt übergeben muss...

        Kannst du das bitte noch mal so formulieren, dass es auch für Menschen einen Sinn ergeben kann, die nicht in deinem Kopf leben?

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Kannst du das bitte noch mal so formulieren, dass es auch für
          Menschen einen Sinn ergeben kann, die nicht in deinem Kopf leben?

          Ich versuche es.
          <input onClick="addition(24);" type="checkbox" name="ArtikelCheckListe" value="593280">
          --> value="EineID" ist belegt, ich kann es nicht mit dem Wert
              füllen, den ich addieren möchte.

          Hier nochmals das Script:

          <script language="JavaScript">
          <!--
          function addition(myValue){

          var std = myValue; // Der Betrag der dazugezählt werden soll
           var summe = 0; // Der Anfangsbetrag

          var frm=document.RetourenForm;

          for(i=0; i < frm.ArtikelCheckListe.length; i++){

          if(frm.ArtikelCheckListe[i].type == 'checkbox' && frm.ArtikelCheckListe[i].checked ){
            summe = summe + Number(std);
           }
           }
           frm.result.value = summe;
          }
          //-->
          </script>

          <form name="RetourenForm" action="save.asp" method=post>
           <input onClick="addition(24);" type="checkbox" name="ArtikelCheckListe" value="593280">
          --> onclick frm.result.value = 24
           <input onClick="addition(24);" type="checkbox" name="ArtikelCheckListe" value="593281">
          --> onclick frm.result.value = 48
           <input onClick="addition(24);" type="checkbox" name="ArtikelCheckListe" value="593282">
          --> onclick frm.result.value = 72
           <input onClick="addition(24);" type="checkbox" name="ArtikelCheckListe" value="593283">
          --> onclick frm.result.value = 96
           <input onClick="addition(24);" type="checkbox" name="ArtikelCheckListe" value="593284">
          --> onclick frm.result.value = 120
           <input onClick="addition(24);" type="checkbox" name="ArtikelCheckListe" value="593285">
          --> onclick frm.result.value = 144
           <input onClick="addition(24);" type="checkbox" name="ArtikelCheckListe" value="593286">
          --> onclick frm.result.value = 168

          So weit eigentlich alles, wie es sein soll. Auch wenn man Häckchen
          entfernt werden die Beträge sauber wieder subtrahiert. Aber dann
          kommt das grosse Rätsel:

          <input onClick="addition(46);" type="checkbox" name="ArtikelCheckListe" value="593287">
          --> onclick frm.result.value = 368 ???
           <input onClick="addition(23);" type="checkbox" name="ArtikelCheckListe" value="593288">
          --> onclick frm.result.value = 207 ???
          </form>