Dynamisch generierte Felder auf Inhalt prüfen.
Tomcat
- javascript
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
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
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