Veröffentlicht 29. Juli 200520 j Hallo, ich überprüfe mit JavaScript verschiedene Textfelder nach Inhalt. Die Textfelder werden dynamisch generiert. D.h. in einem Shop bucht der User eine Reise und gibt dabei an, wieviele Personen mitreisen werden. Später werden dann für jedes Produkt jeweils so viele Textfelder angezeigt, wie der User bei der entsprechenden Reise angegeben hat. Z.B. Mallorca-Reise (3 Personen) Vorname: xxxxxxxxx (Textfeld-Name: vorname0-1, für artikel 0, person 1) Nachname: xxxxxxxx Vorname: xxxxxxxxxx (Textfeld-Name: vorname0-2) Nachname: xxxxxxxxx Unter jedem Artikel steht dann noch ein hidden-Textfeld anzahl0, anzahl1,... in dem die Anzahl der Personen für den jeweiligen Artikel stehen. Es werden nur 2 mal die Textfelder angezeigt, weil der Buchende ja automatisch dabei ist. Das ganze funktioniert auch soweit, nur die Fehlerkontrolle über JavaScript bereitet mir noch Probleme. Er überprüft immer nur die erste Reise und steigt dann aus. hier der Code: <script language="javascript"><!-- function CheckInput () { var anzahl_produkte = document.checkout_confirmation['anzahl_produkte'].value; var anzahl_personen = 0; for (x = 0; x < anzahl_produkte; x++){ anzahl_personen = document.checkout_confirmation['anzahl'+x].value; for (y = 1; y <= anzahl_personen; y++){ if (document.checkout_confirmation['vorname'+x+'-'+y].value==''){ alert("Bitte geben Sie noch die Personalien der Mitreisenden an!"); document.checkout_confirmation['vorname'+x+'-'+y].focus(); return false; } } } return true; } //--> </script> [/PHP] Kann mir jemand sagen was ich falsch mache? Er überprüft immer nur die Eingaben zum ersten Produkt und nicht die anderen. Bin leider in JavaScript noch ein ziemlicher Anfänger. Vielen Dank im Voraus Johannes
29. Juli 200520 j Hi, hm hast du dir mal ein paar debug ausgaben reingemacht? scheint so, als wäre die anzahl_personen falsch... Gruß, Markus
29. Juli 200520 j Debug-Ausgaben hab ich reingemacht, bin allerdings daraus auch nicht schlauer geworden. Die anzahl_produkte und anzahl_personen werden richtig ausgegeben. Eigentlich müsste ja anzahl_produkte falsch sein, weil er ja die Schleife immer nur ein mal durchläuft, egal wieviele Produkte ich angebe. Keine ahnung wo und wieso er da immer aussteigt. ich habs auch so probiert, weil ich dachte es hätte evtl. mit den Strings was zu tun: var anzahl_produkte = 1*document.checkout_confirmation['anzahl_produkte'].value; anzahl_personen = 1*document.checkout_confirmation['anzahl'+x].value; [/PHP] Aber der gleiche Fall... Ich weiss echt nicht mehr weiter und heute sollte es fertig werden.
7. August 200520 j Hi, du generierst doch die Inputs serverseitig; da wuerde ich auch keine JSgemurkse machen, sondern das JS auch serverseitig generieren -> gluecklich sein gruss
8. August 200520 j ich widerspreche das mit JS zu machen ist schon ganz ok, Serverseitig hast du mehr arbeit mit der Behandlung der Fehler, falls einer auftritt. aber BITTE lasst es jetzt nicht in eine anti-JS diskussion ausbrechen ja ? *g* du solltest, wie angedeutet, erstmal debug-Ausgaben machen, damit du schritt für schritt an den Fehler herankommst.
8. August 200520 j hey aiun, du musst auch lesen, was ich schreibe !!!! ich habe nicht geschrieben validiere serverseitig; alo bitte nochmal lesen gruss
11. August 200520 j Hab jetzt nochmal den (vereinfachten) HTML-Code rauskopiert. Das ganze sieht dann so aus: <html> <head> <script language="javascript"><!-- function CheckInput () { var anzahl_produkte = 1*document.checkout_confirmation['anzahl_produkte'].value; alert("Anzahl Produkte: "+anzahl_produkte); var anzahl_personen = 0; for (x = 0; x < anzahl_produkte; x++){ anzahl_personen = 1*document.checkout_confirmation['anzahl'+x].value; alert("Anzahl Personen( "+x+") :"+anzahl_personen); for (y = 1; y < anzahl_personen; y++){ alert("vorname-"+x+"-"+y+": "+document.checkout_confirmation['vorname'+x+'-'+y].value); if (document.checkout_confirmation['vorname'+x+'-'+y].value==''){ alert("Bitte geben Sie noch die Personalien der Mitreisenden an!"); document.checkout_confirmation['vorname'+x+'-'+y].focus(); return false; } alert("Innere Schleife: Ende"); } alert("Schleifenende "+x); } alert("Over and out..."); return error; } //--> </script> </head> <body> <form name="checkout_confirmation"> <br /><br /> <b>Tiefseetauchen 2000m</b> (214.6552 EUR) <br /> Vorname: <input name='vorname0-1' value=''> <br /> Vorname: <input name='vorname0-2' value=''> <br /> Vorname: <input name='vorname0-3' value=''> <br /> <input type='hidden' name='anzahl0' value='4' /> <br /> <br /> <b>Tauchgänge</b> (1000 EUR) <br /> Vorname: <input name='vorname1-1' value=''> <br /> Vorname: <input name='vorname1-2' value=''> <br /> <input type='hidden' name='anzahl1' value='3' /> <input type='button' value='Felder prüfen' onClick='CheckInput()'> <br /><br /> <input type='hidden' name='anzahl_produkte' value='2' /> <br /> </form> </body> </html> Das Problem bleibt das gleiche. Er überprüft immer nur das erste Produkte und steigt dann (irgendwo) aus.
11. August 200520 j for (x = 0; x < anzahl_produkte; x++){ anzahl_personen = 1*document.checkout_confirmation['anzahl'+x].value; alert("Anzahl Personen( "+x+") :"+anzahl_personen); kanns daran liegen sollte da nicht "anzahl_personen" stehen?
11. August 200520 j Nein, die Felder anzahl0, anzahl1,... sind hidden-Felder, in denen jeweils die Anzahl der Personen zum entsprechenden Produkt stehen. Das müsste eigentlich passen.
11. August 200520 j also man hat gewonnen wenn keine box mehr kommt und was von anzahl der produkte ... also ich habs mal so versucht: var anzahl_produkte = 1*document.checkout_confirmation['anzahl_produkte'+x].value; alert("Anzahl Produkte: "+anzahl_produkte); var anzahl_personen = 0;
12. August 200520 j Tip: arbeite mal mit dokument.getElementByID anstatt mit dem Formular/Feldnamen, und dann gug mal ob du überhaupt die Werte aus den Feldern herausgelesen bekommst. ein "var XYZ" am Anfang für jede Variable würde das JS auch eindeutiger machen.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.