Tomcat: Dynamisch generierte Felder auf Inhalt prüfen.

Hallo Forumer,

ich möchte bestimmte Felder in einem Formular prüfen, ob sie etwas enthalten oder nicht. Das Problem, was sich mir bis jetzt noch stellt ist, daß die Anzahl, und damit der Name der Felder immer unterschiedlich ist.

Ich vergebe den Names dieses Feldes so, daß ich über einen Zähler bei einer DB Abfrage eine Zahl zum Namen des Feldes dazu addiere.

<form name="Bestellung" method="POST" action="CDONTSMail_bestellung2.asp" onSubmit="return chkFormular()">
.
.
  DB Abfrage....
  rs.MoveFirst
  i = 1
.
.
  i = i + 1
  rs.MoveNext
  loop
  Session("AvalArtikelCount") = i
.

Das Ergebnis sieht dann je nach Anzahl der Daten aus der DB so aus:
  
.
.
<input type="text" name="Menge_<%=i%>" size="3">
.

Bei 12 Einträgen habe ich also:

...<input type="text" name="Menge_1" size="3">
...<input type="text" name="Menge_2" size="3">
.
.
.
...<input type="text" name="Menge_11" size="3">
...<input type="text" name="Menge_12" size="3">

Diese Felder sind bei Aufruf der Seite leer. Der User soll hier nun seine Menge eingeben. Also mit einer Zahl füllen.

Gibt er nirgends eine Zahl ein und klickt trotzdem auf "Abschicken", soll die Prüfung stattfinden und ihm sagen, daß er nirgends eine Zahl eingegeben hat. Diese Meldung soll aber nicht erscheinen, wenn er von den 12 Feldern auch nur eins gefüllt hat. Dabei ist die Zahl 12 variable..

Ich habe schon versucht, mit der o. g. Funktion zu arbeiten, komme aber nicht weiter.

<script language="JavaScript">
  <!--
  function chkFormular()
  {
   if(document.Bestellung.Menge_<%=i%>.value = "0")
    {
     alert("Sie haben noch nichts bestellt !");
     document.Bestellung.Menge_<%=i%>.focus();
     return false;
    }
   }

Bei mir schickt er das Formular ohne Inhalt trotzdem ab.

Was mache ich falsch?

MfG

Tom

  1. hi tom,

    ich würde mal sowas versuchen:

    function chkFormular()
    {
    ok = false;
    laenge = <%=i%>
    for (i=0;i<laenge;i++)
    {
    if(document.forms[0].elements[i].value != "")
    {
    ok = true;
    }
    }
    return ok;
    }

    aber meines wissens zählen alle elemente zu forms.elements  d.h. wenn du am anfang oder dazwischen irgendwo noch ein form-element hast, dann musst du die funktion entsprechend anpassen, da er einfach der reihe nach alle elemente durchläuft.

    hoffentlich konnte ich helfen.

    c ya

    sim

  2. hallo herr Kruse(Tomcat),

    ich hoffe, dass Du nur durch einen
    langen arbeitstag mit doofen VB-scripting
    in Deinen gedankengaengen steckengeblieben
    bist - ich sehe zwei loesungsansaetze:
    (a) uebergabe von <% i %> an eine JS-variable
        mit ueberarbeitung der gesamten JS-funktion,
        weil es so wie es bei Dir geschrieben steht
        auch nicht funktionieren kann;
    (b) VBscript unabhaengige loesung nur ueber
        JS mit abfrage von documents.forms[].element[].length
        (abzueglich der beiden knoepfe [submit] bzw [reset] oder
         was da noch alles so by default als element im formular
         stehen sollte);

    deine quellcode:
    ----------------
    »».
    »»<input type="text" name="Menge_<%=i%>" size="3">
    »».
    »»Bei 12 Eintraegen habe ich also:
    »»
    »»...<input type="text" name="Menge_1" size="3">
    »»...<input type="text" name="Menge_2" size="3">
    »».
    »».
    »».
    »»...<input type="text" name="Menge_11" size="3">
    »»...<input type="text" name="Menge_12" size="3">

    »»  <script language="JavaScript">

    <!--
      function chkFormular()
      {
       if(document.Bestellung.Menge_<%=i%>.value = "0")
        {
         alert("Sie haben noch nichts bestellt !");
         document.Bestellung.Menge_<%=i%>.focus();
         return false;
        }
       }

    meine vorschlaege:
    ------------------
        .
        .
        <input type="text" name="Menge_<%response.write(i)%>" size="3" value="">
        .

    (a) <script language="JavaScript">
        <!--
        var menge = <%response.write(i)%>;
        function chkFormular()
           {for (k=1;k<=menge;k++)
              {if (self.document.forms["Bestellung"].elements[eval("Menge_"+k)].value == "")
                 {//bitte auf den alert verzichten, dass nervt
                  //tatsaechlich genuegt das dezente setzen des focus
                  self.document.forms["Bestellung"].elements[eval("Menge_"+k)].focus();
                  return false;
                  break;
                 }
             return true;
            }
        //-->
        </script>

    (b) <script language="JavaScript">
        <!--
        var menge = 0;
        function getMenge()
           {menge = self.document.Bestellung.elements.length;
            menge = menge - [die anzahl von elementen, die sich by
                             default noch im selben formular befinden];
           }
        function chkFormular()
           {for (k=1;k<=menge;k++)
              {if (self.document.Bestellung.elements[k-1].value == "")
                 {//bitte auf den alert verzichten, dass nervt
                  //tatsaechlich genuegt das dezente setzen des focus
                  self.document.Bestellung.elements[k-1)].focus();
                  return false;
                  break;
                 }
             return true;
            }
        //-->
        </script>
        </head>

    <body .. onload="getMenge()">
         ...

    anmerkung: das "[k-1]" in bsp (b) muss Du natuerlich
                   anpassen, wenn Dein erstes element im formular
                   kein zu pruefendes texteingabefeld ist;

    so sollte es funktionieren, auch wenn ich das script jetzt
        nicht noch durchlaufen lasse, um seine syntax zu pruefen -
        falls sich also kommasemikolonwasweisichfuerfehler einge-
        schlichen haben musst Du selbst hand anlegen und debuggen;

    ich verbleibe mit freundlichen gruessen  - peter seliger
                                                   pseliger@gmx.net