Peterchens Mondfahrt: document.forms.elements.value

Hallo zusammen,

ich möchte per javascript testen, ob eine eingegebene Bestellmenge einen vorher definierten Wert überschreitet.
Meine Abfrage sieht so aus:

if (document.forms['NAME'].elements['bestellmenge'].value > 50)
 {alert('Bestellmengen > 50 sind nicht zulässig !')}
else
 {alert('Bestellmenge ist OK !')};

Leider erhalte ich IMMER die Meldung, dass der Bestellwert OK sei... weiss einer von euch wo der Fehler liegt ??

Besten Dank

Peter

  1. Hi Peter,

    if (document.forms['NAME'].elements['bestellmenge'].value > 50)
     {alert('Bestellmengen > 50 sind nicht zulässig !')}
    else
     {alert('Bestellmenge ist OK !')};

    Leider erhalte ich IMMER die Meldung, dass der Bestellwert OK sei... weiss einer von euch wo der Fehler liegt ??

    Das funktioniert:

    bm = 80;

    if (bm > 50)
     {alert('Bestellmengen > 50 sind nicht zulässig !')}
    else
     {alert('Bestellmenge ist OK !')};

    also liegt der Fehler im

    document.forms['NAME'].elements['bestellmenge'].value

    Ermittle mal per

    bm = document.forms['NAME'].elements['bestellmenge'].value;
    alert(bm);

    was da abgefragt wird.

    1. Hi Mike,

      bm = document.forms['NAME'].elements['bestellmenge'].value;
      alert(bm);

      was da abgefragt wird.

      ...Seltsamer Weise "undefined" !?
      Hab' Fehlerquellen wie falscher Form- oder Elementname ausgeschlossen...
      Woran könnt's liegen ???

      Gruss

      Peter

      1. Hallo Peter,

        ...Seltsamer Weise "undefined" !?
        Hab' Fehlerquellen wie falscher Form- oder Elementname ausgeschlossen...
        Woran könnt's liegen ???

        Weiß ich leider nicht zu beantworten, ohne Quelltext. Hast Du auf Groß- und Kleinschreibung geachtet?

        1. Hi Mike,
          Groß- und Kleinschreibung hab ich beachtet...
          is aber auch egal...ich verschieb das auf morgen und mach nu Feierabend *g*

          Gruss

          Peter

          1. Guten Morgen zusammen !

            Ich sitze wieder in meinem kleinen Büro und knacke noch immer am selben Problem wie gestern Abend...

            Nochmal zur Erklärung:

            Ich habe eine Tabelle die dynamisch erzeugt wird.
            Also
            <table>
            FOR-Schleife mit Zähler i {
            <tr>
             <td>Info</td>
             <td>
            ********************************
            <input name='bestellmenge' type='text' size='5' maxlength='2' onChange='mengenpruefen()'>
            ********************************
             </td>
            </tr>
            }
            </table>
            ------------------------------------------------------------------
            Das script "mengenpruefen" sieht so aus:
            function mengenpruefen()
            {
            bm = document.forms['FORM'].elements['bestellmenge'].value;
            if (bm > 50)
             {alert('Bestellmengen > 50 sind nicht zulässig !')}
            else
             {alert(bm)};
            }
            -----------------------------------------------------------------
            Es wird IMMER "alert(bm)" ausgegeben mit bm undefined....
            Woran kann das liegen ?
            Ich habe auch versucht den Feldnamen durch den Zähler eindeutig zu machen
            (also 'bestellmenge1','bestellmenge2','bestellmenge3', usw.), aber auch dabei kommt bm als undefined zurück !?

            Kann mir das jemand erklkären, oder hat jemand von euch einen Lösungsvorschlag ??

            Danke

            Peter

            1. Nochmal zur Erklärung:

              Na also endlich mal eine ausführliche und hilfreiche Erläuterung, so liesse sich dir auch helfen.

              FOR-Schleife mit Zähler i {

              ********************************
              <input name='bestellmenge' type='text' size='5' maxlength='2' onChange='mengenpruefen()'>
              ********************************

              So, und jetzt hat dein Formular nicht ein Feld mit dem Namen 'bestellmenge' sondern i in dem Falle greifst du auf die einzelnen Felder mit:

              document.forms['NAME'].elements['bestellmenge'][index] zu. Wobei index gleich null bis i-1 ist.

              und dann müßtest du:

              function mengenpruefen()
              {
              bm = document.forms['FORM'].elements['bestellmenge'].value;

              hier das Array durchlaufen.

              for(var i = 0; i < document.forms['FORM'].elements['bestellmenge'].length;i++)
              bm = document.forms['FORM'].elements['bestellmenge'][i].value;

              Aber ich hatte dir ja bereits einen anderen Vorschlag gemacht.

              Struppi.

      2. Hallo Fremder,

        Hab' Fehlerquellen wie falscher Form- oder Elementname ausgeschlossen...

        scheinbar nicht.
        Du mußt mal Stück für Stück Testausgaben machen:
        alert(document.forms['NAME'])
        alert(document.forms['NAME'].elements)
        for(i in document.forms['NAME'].elements)
           alert(i)
        usw...

        und was hast Du denn da überhaupt für ein Formularelement. Hat das überhaupt einen Value? - scheinbar ja nicht.

        Gruß, Andreas

  2. Hallo zusammen,

    ich möchte per javascript testen, ob eine eingegebene Bestellmenge einen vorher definierten Wert überschreitet.
    Meine Abfrage sieht so aus:

    if (document.forms['NAME'].elements['bestellmenge'].value > 50)
     {alert('Bestellmengen > 50 sind nicht zulässig !')}
    else
     {alert('Bestellmenge ist OK !')};

    Leider erhalte ich IMMER die Meldung, dass der Bestellwert OK sei... weiss einer von euch wo der Fehler liegt ??

    Mal wieder so ein unvollständiger Code mit dem dir kaum jemand helfen kann :-(

    Also falls du wirklich eine Formular hast mit den Namen 'NAME' und dem Textfeld 'bestellmenge' und du dort eine Zahl größer als 50 eingibst ist der Code da oben richitg und funktioniert in allen mit bekannten Browsern, die Javascript können. Folglich ist etwas an deinem HMTL Code nicht in Ordnung. Um das heraus zu finden solltest du (wie es eigentlich jeder Programmierer macht) versuchen die Werte die du erwartest verifizieren. Also in deinem JS Code folgendes einbauen:

    // existiert das Dokument?
    if(!document) alert('document ist noch nicht fertig geladen');

    // existiert das Formular?
    if (!document.forms['NAME']) alert('Das Formular mit dem Namen NAME existiert nicht');

    // existiert das Feld?
    if (!document.forms['NAME'].elements['bestellmenge']) alert('Das Feld existiert nicht');

    Alles in allen ist dies aber ziemlich umständlich. Da du vermutlich den Wert beim abschicken prüfst kannst du die Referenz zum Formular direkt mitgeben:

    <form .... onsubmit="return chkFrm(this);"..>

    function chkFrm(form)
    {
        // Hier hast du jetzt Zugriff auf das Formular
        // und musst entweder ein true/false zurückgeben
    }

    Struppi.

    1. Hallo Struppi,

      Mal wieder so ein unvollständiger Code mit dem dir kaum jemand helfen kann :-(

      ... jo, sorry... ;-)

      Also falls du wirklich eine Formular hast mit den Namen 'NAME' und dem Textfeld 'bestellmenge' und du dort eine Zahl größer als 50 eingibst ist der Code da oben richitg und funktioniert in allen mit bekannten Browsern, die Javascript können. Folglich ist etwas an deinem HMTL Code nicht in Ordnung. Um das heraus zu finden solltest du (wie es eigentlich jeder Programmierer macht) versuchen die Werte die du erwartest verifizieren. Also in deinem JS Code folgendes einbauen:

      // existiert das Dokument?

      ja (verifiziert)

      // existiert das Formular?

      ja (verifiziert)

      // existiert das Feld?

      ja (verifiziert)

      Alles in allen ist dies aber ziemlich umständlich. Da du vermutlich den Wert beim abschicken prüfst ...

      nein... das script wird bei Änderung des Feldes aufgerufen (also <onchange> ...
      Es geht einfacher - ist klar - aber wie ich schon geschrieben hatte, handelt es sich hierbei lediglich um die Ausgabe eines grösseren java-Programmes und DEN source poste/erkläre ich hier nicht *g*

      Gruss

      Peter

      1. // existiert das Dokument?
        ja (verifiziert)
        // existiert das Formular?
        ja (verifiziert)
        // existiert das Feld?
        ja (verifiziert)

        und hat dann obwohl du eine Zahl eingibst den Wert undefined?
        Das kann nicht sein.

        Alles in allen ist dies aber ziemlich umständlich. Da du vermutlich den Wert beim abschicken prüfst ...

        nein... das script wird bei Änderung des Feldes aufgerufen (also <onchange>

        Dann ist es ja noch einfacher:

        <input type="text" onchange="if(this.value > 50) {alert('wert zu groß!');this.value = '';}">

        Struppi.

        1. Hi,

          Dann ist es ja noch einfacher:

          <input type="text" onchange="if(this.value > 50) {alert('wert zu groß!');this.value = '';}">

          coool.... Danke !!!

          (wieder was gelernt *g*)
          werd ich gleichmal antesten !

          Gruss

          Peter