Loop
Sonja Kunz
- javascript
0 Calocybe0 Sonja Kunz0 Calocybe0 Sonja Kunz0 Calocybe
0 Mirco Schöl
Kann mir jemand helfen wie ich folgendes mit JavaScript lösen kann?
Aus "CallTo" soll durch einen Loop "CallTo1", "CallTo2", usw.
entstehen.
function chkFormular()
var chkZ = 1;
for(i=0;i((kleiner als) ausschreibe es aus, damit es sicher als
Text ausgegeben wird!)document.Formular.CallTo1.value.length;++i)
if(document.Formular.CallTo1.value.charAt(i) "9")
chkZ = -1;
if(chkZ == -1)
alert("Eingabe keine Zahl!");
document.Formular.CallTo1.focus();
return false;
Vielen Dank!
Sonja
Vielen Dank!
Sonja
Hallo Sonja!
Sorry, kannst Du bitte nochmal ausfuehrlich und auf Deutsch schreiben, was Du willst? Aus Deinem angedeuteten Code werde ich jedenfalls nicht so richtig schlau. Welche Formularelemente willst Du ueberpruefen, und was soll bei denen ueberprueft werden?
Calocybe
Hallo Sonja!
Sorry, kannst Du bitte nochmal ausfuehrlich und auf Deutsch schreiben, was Du willst? Aus Deinem angedeuteten Code werde ich jedenfalls nicht so richtig schlau. Welche Formularelemente willst Du ueberpruefen, und was soll bei denen ueberprueft werden?
Calocybe
Hallo!
Also, mit einem ColdFusion-Loop (CallTo#rowcnt#) frage ich in der Datenbank Preise ab,
resp. trage sie ein.
Nun möchte ich, dass wenn jemand Buchstaben statt Zahlen eingeben will, eine
alert-Meldung ausgegeben wird.
Das mit der Ausgabe der alert-Meldung klappt, wenn ich den ganzen Code mehrere Male eingebe mit CallTo1, CallTo2, usw. Da es aber mehr als fünfzig Einträge sind die überprüft werden sollen, wäre es schön wenn ich aus CallTo eine Variable machen könnte.
Hoffe dass ich es dieses Mal besser erklären konnte. Sorry!
Liebe Grüsse
Sonja
Hi!
Ok, diesmal war's schon verstaendlicher. *g* Du hast also eine Anzahl y Textfelder (INPUT TYPE=TEXT), die die Namen CallTo1 bis CallToy tragen, die Du daraufhin ueberpruefen willst, ob eine Zahl und nichts anderes drin steht.
var NUMBER_OF_CALLTO_INPUTS = 50; // Anzahl y der zu ueberpruefenden Textfelder
function chkTextInput(input) {
return (!isNaN(parseInt(input.value, 10)));
}
function chkFormular() {
var i;
var input;
for (i=1; i<=NUMBER_OF_CALLTO_INPUTS; i++) {
input = eval("document.Formular.CallTo" + i); // erzeugt Referenz auf ein element (<../../tecbbda.htm>)
if (!chkTextInput(input)) {
alert("Keine Zahl eingegeben in Element " + input.name + "!");
input.focus();
return false;
}
}
return true;
}
Falls Du die Anzahl der Elemente im vorneherein nicht weisst, musst Du statt der obigen For-Schleife eine Konstruktion aehnlich folgender verwenden:
for (input in document.Formular.elements) {
if (input.name.substring(0, 6) != "CallTo") next; // alle ueberspringen, die nicht mit "CallTo" beginnen
if (!chkTextInput(input)) {
alert("Keine Zahl eingegeben in Element " + input.name + "!");
input.focus();
return false;
}
}
Wie parseInt() auf leere Zeichenketten reagiert, also wenn nichts in ein Textfeld eingegeben wurde, weiss ich nicht. Notfalls musst Du in der chkTextInput()-Funktioon das noch extra pruefen.
Calocybe
Hallo Calocybe!
Vielen Dank für Deine Hilfe!
Läuft jetzt so wie ich es wollte!
Habe nur noch ein kleines Problem, da ich JavaScript-Anfängerin bin.
Ausser "CallTo" habe ich auch noch "CallFrom" im gleichen Formular.
Schaffe es nicht dies zusätzlich einzubauen.
Dürfte ich Dich noch um einen Tip diesbezüglich bitten?
Wäre sehr froh darüber!
Danke
Sonja
Hi again!
Ausser "CallTo" habe ich auch noch "CallFrom" im gleichen Formular.
Schaffe es nicht dies zusätzlich einzubauen.
Ich nehme an, es gibt nur ein einziges CallFrom? Dann kannst Du mit document.Formular.CallFrom genau so eine Referenz erzeugen, die Du an chkTextInput() uebergeben kannst. Im Klartext heisst das, Du musst in der chkFormular()-Funktion VOR oder HINTER der For-Schleife, aber nicht innerhalb derselben, sowas ungefaehr einfuegen:
if (!chkTextInput(document.Formular.CallFrom)) {
alert("Keine Zahl eingegeben in Element CallFrom!");
document.Formular.CallFrom.focus();
return false;
}
(Die Abfrage "if (!chkTextInput(document.Formular.CallFrom))" ist uebrigens gleichbedeutend mit "if (chkTextInput(document.Formular.CallFrom) == false)".)
Calocybe
Hi Calocybe!
Ich nehme an, es gibt nur ein einziges CallFrom?
---> Nein, es war das gleiche Problem wie bei CallTo, habe es aber geschafft, dank Deiner Hilfe!
Vielen herzlichen Dank, es läuft!
@>-->--
Sonja
Moin!
Also wenn ich das Code-WirrWarr richtig deute willst Du ueberpruefen ob eine Zahl eingegeben wurde, und das dann bei mehreren Textfeldern?
Wenn ja, dann vergib keine Namen fuer die Textfelder. Dann kannst Du sie ueber document.form.text[index] ansprechen.
Hope this helps
Mirco
Hi Mirco
Wenn ja, dann vergib keine Namen fuer die Textfelder. Dann kannst Du sie ueber document.form.text[index] ansprechen.
Kannst du "benamte" Objekte nicht trotzdem über den Index ansprechen?
Grüße
Andreas
Hi Andreas!
Kannst du "benamte" Objekte nicht trotzdem über den Index ansprechen?
Ich hab das mit benannten Objekten noch nicht ausprobiert.
Aber eigentlich muesste das bei Textfeldern auch klappen, denn es klappt auf jeden Fall bei Radio-Buttons.
Schoene Gruesse
Mirco
Moin!
Also wenn ich das Code-WirrWarr richtig deute willst Du ueberpruefen ob eine Zahl eingegeben wurde, und das dann bei mehreren Textfeldern?
Hallöchen
Ne andere Möglichkeit, die mit den Namen arbeitet, ist, daß du den Befehl eval(Schleifenzaehler)
(<../../tecm.htm#a2> )
verwendest.
Damit bekommst du den aktuellen Wert des Schleifenzählers, den du an CallTo anhängen kannst..
Positively
Lorenz