Peter Seliger: Dynamisch generierte Felder auf Inhalt prüfen.

Beitrag lesen

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