Bernd: Werte aus Form prüfen

Hallo!

Ich habe ein Formular, in dem mehrere Rows vorhanden sind, aber jede Row für sich im Moment einer Eingabe geprüft werden soll. Das haut auch hin, aber nur für die erste Row :-( Wie komme ich an die anderen Rows ran?

Vielen Dank, Bernd

<script type="text/javascript">
<!--
function check(form){

var menge = document.getElementById('menge').value;

if(isNaN(menge)){
   alert("nur zahlen");
  }
  else{
    calcSum();
  }
}

function calcSum() {
  var preis = document.getElementById('preis').value;
  var menge = document.getElementById('menge').value;
  var erg =  preis * menge;
  document.form1.summe.value = erg;
  document.getElementById('erg').innerHTML = erg;

}

//-->
</script>
</head>
<form name="form1">
<input type="hidden" id="preis" name="preis" value="33.23">
<input onKeyUp="check();" type="text" id="menge" name="menge" value="" size="3"><span id="erg" name="erg"></span><br>
<input type="text" name="summe" value="0" readOnly><br>
<br><br>
<input type="hidden" id="preis" name="preis" value="4">
<input onKeyUp="check();" type="text" id="menge" name="menge" value="" size="3"><span id="erg" name="erg"></span><br>
<input type="text" name="summe" value="0" readOnly><br>

</form>

  1. Hallo Bernd,

    eine ID ist einzigartig!

    Du verwendest aber id="menge" mehrfach.

    Liebe Grüße,

    Bernd

    1. OK, lieber Namensvetter, das leuchtet ein. Ich habe es nun etwas umgebaut, mir ist aber immer noch nicht klar, wie ich nun den namen der Row übergeben soll.

      <script type="text/javascript">
      <!--
      function check(menge){

      var menge = document.getElementById('menge').value;

      if(isNaN(menge)){
         alert("Nur Ganzzahlen erlaubt!");
        }
        else{
          calcSum();
        }
      }

      function calcSum() {
        var preis = document.getElementById('preis').value;
        var menge = document.getElementById('menge').value;
        var erg =  preis * menge;
        document.form1.summe.value = erg;
        document.getElementById('erg').innerHTML = erg;

      }

      //-->
      </script>
      </head>
      <form name="form1">
      <input onKeyUp="check("33");" type="text" name="1" value="" size="3"><span id="erg" name="erg"></span><br>
      <input type="text" name="summe" value="0" readOnly><br>
      <br><br>
      <input onKeyUp="check("4");" type="text" name="2" value="" size="3"><span id="erg" name="erg"></span><br>
      <input type="text" name="summe" value="0" readOnly><br>

      </form>

      1. Hi

          
        
        > <script type="text/javascript">  
        > <!--  
        > function check(form){  
        >   
        >  var from = document.getElementById('form';  
          
        for (i=0; i<from.childNodes.length(); i++)  
        {  
          
        
        >   
        >  if(isNaN(form.childNodes[i])){  
        >    alert("Nur Ganzzahlen erlaubt!");  
        >   }  
        >   else{  
        >     calcSum();  
        >   }  
        
        }  
        
        > }  
        
        

        Klappere einfach alle felder ab... natürlich musst du dann die ID des Formulars übergeben... und möglichst keine anderen felder im Formular haben...

        eine ander möglichkeit ist das durchgehen von gleichnamigen feldern mit document.getElementsByName('menge')[i]

        THX

        --
        ie:} fl:( br:> va:) ls:& fo:# rl:( n4:? ss:) de:] js:| ch:? sh:) mo:? zu:)
        ------------------------------
        lieber ein Pinguin der läuft
        als ein Fenster das hängt
        ------------------------------
        1. Ich raffe es einfacht nicht. Habe es versucht, nach deinem Vorschlag umzubasteln, aber jetzt gibt´s gar keine Ausgabe mehr, nicht mal einen Fehler ;-)

          <script type="text/javascript">
          <!--
          function check(mutliplikator){

          var menge = document.getElementById('menge')[i].value;

          if(isNaN(menge)){
             alert("Nur Ganzzahlen erlaubt!");
            }
            else{
              calcSum();
            }
          }

          function calcSum(mutliplikator) {
            var menge = document.getElementById('menge')[i].value;
            var erg =  mutliplikator * menge;
            document.form1.summe.value = erg;
            document.getElementById('erg')[i].innerHTML = erg;

          }

          //-->
          </script>
          </head>
          <form name="form1">
          <input onKeyUp="check("33");" type="text" name="menge[1]" value="" size="3"><span id="erg" name="erg"></span><br>
          <input type="text" name="summe[1]" value="0" readOnly><br>
          <br><br>
          <input onKeyUp="check("4");" type="text" name="menge[2]" value="" size="3"><span id="erg" name="erg"></span><br>
          <input type="text" name="summe[2]" value="0" readOnly><br>

          </form>

          1. document.getElementById('menge')[i] ist nicht korrekt. der aufruf von getElementByID ist doch: document.getElementById()
            Bei dir ist aber [i] ausserhalb der übergebenen ID. [i] gehört mit in die Klammer.
            also müsste es wahrscheinlich so aussehen:
            document.getElementById('menge'[i])

            1. hi,

              also müsste es wahrscheinlich so aussehen:
              document.getElementById('menge'[i])

              Nein.

              Erstens müsste es wenn überhaupt 'menge[1]', 'menge[2]' sein - also zusammengesetzt 'menge['+i+']'.

              Und zweitens haben die betreffenden Elemente gar keine solche ID, sondern lediglich einen Namen.

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }
              1. Ich geb´s nun auf - trotzdem vielen Dank euch allen!

                1. Hallo Bernd,

                  wer wird denn so schnell aufgeben ;-)

                  Und es ist immer schwierig eine Lösung vorzuschlagen oder einen Anhaltspunkt zu geben wenn man das Problem Unfeld nicht kennt.

                  Und in der Programmierung führen viele Wege nach Rom.
                  Hier mal auf die schnelle hingerotzt:

                  <script type="text/javascript">
                  function check(form){
                    var tmp = form.id.split("menge");
                    var myID = tmp[1];
                    menge = form.value;

                  if(isNaN(menge)){
                     alert("nur zahlen");
                    }
                    else{
                      calcSum(menge, myID);
                    }
                  }

                  function calcSum(menge , myID) {
                    var preis = document.getElementById('preis'+myID).value;
                    var erg =  preis * menge;
                    document.getElementById('summe'+myID).value= erg;
                    document.getElementById('erg'+myID).innerHTML = erg;
                  }
                  </script>
                  </head>
                    <body>

                  <form name="form1">
                    <input type="hidden" id="preis1" value="33.23">
                    <input onKeyUp="check(this);" type="text"  id="menge1" value="" size="3"><span id="erg1"></span><br>
                    <input type="text" id="summe1" name="summe1" value="0" readOnly><br>
                    <br><br>
                    <input type="hidden" id="preis2" value="4">
                    <input onKeyUp="check(this);" type="text" id="menge2" value="" size="3"><span id="erg2"></span><br>
                    <input type="text" id="summe2" name="summe2" value="0" readOnly><br>

                  </form>

                  Und vegess nicht auf zwei Nachkommastellen zu runden.
                  Hier schon tausendmal erfragt worden.

                  Liebe Grüße an den Namensvetter,

                  Bernd

              2. also ich denke mal, dass ich schon recht habe
                document.getElementsByName('menge')[i] müsste korrekt sein.
                Ich habe dazu folgendes gefunden:
                Array mit getElementsByName
                dort geht es im Beispiel zwar um Checkboxen, aber das Prinzip, wie ein Array durchlaufen wird, sollte überall gleich sein.

                Davon abgesehen halte ich deinen geposteten Link für einfacher  @wahsaga

                bei beichen
                difficultchild

                1. hi,

                  also ich denke mal, dass ich schon recht habe
                  document.getElementsByName('menge')[i] müsste korrekt sein.

                  Nein, in diesem Falle nicht.

                  Ich habe dazu folgendes gefunden:
                  Array mit getElementsByName
                  dort geht es im Beispiel zwar um Checkboxen, aber das Prinzip, wie ein Array durchlaufen wird, sollte überall gleich sein.

                  Dort haben die Checkboxen alle den selben Namen - in Bernds Beispielcode war das aber nicht der Fall, jeder Name war eindeutig.

                  gruß,
                  wahsaga

                  --
                  /voodoo.css:
                  #GeorgeWBush { position:absolute; bottom:-6ft; }
            2. ich muss mich korrigieren ;-)

              du hast in deinem Quelltext 'menge' als name und nicht als id, deshalb funktioniert es nicht.
              du müsstest also getElementsByName('menge')[i] benutzen.

              Sorry

              mfg
              difficultchild

              1. hi,

                du müsstest also getElementsByName('menge')[i] benutzen.

                Nein, er hat auch keine Elemente mit dem Namen 'menge'.

                Warum so kompliziert, wenn's auch einfach geht?

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
                1. elegante und einfache Lösung ;-)

                  bei beichen
                  difficultchild

            3. Dann kommt ein "Objekt erforderlich"-Error.