![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
#2
| |||||||
| |||||||
|
|
[...] Habe ein Script geschrieben, welches, je nachdem welcher Radiobutton geklickt wurde, den Inhalt eines bestimmten Feldes bedingt (gekürzt): function pruefen(form) { var name = document.form.name.value; |
|
var anfrage = document.form.anfrage.value; |
|
if ((document.form.kontakt[0].checked == true) && |
|
[...] if ((name == "") || (name == " ") || (name == " ") || (name == " ")) { alert("Bitte geben Sie Ihren Namen an!"); |
|
return false; } if ((anfrage == "") || (anfrage == " ") || (anfrage == " ") || (anfrage == " ")) { alert("Bitte füllen Sie das Feld Text aus!"); return false; } } Das Ganze funktioniert aber nur so wie hier, als ich zuerst die unteren zwei Abfragen zuoberst anordnete, gings nicht. Kann mir bitte jemand erklären, wieso das so ist? |
|
| (name == " ")) { |
|
| (anfrage == " ")) { |
#3
| |||
| |||
|
|
Hallo zusammen bin leider noch Anfänger und habe zu diesem Thema nichts im Netz gefunden. Habe ein Script geschrieben, welches, je nachdem welcher Radiobutton geklickt wurde, den Inhalt eines bestimmten Feldes bedingt (gekürzt): function pruefen(form) { var name = document.form.name.value; var anfrage = document.form.anfrage.value; |
|
Das Ganze funktioniert aber nur so wie hier, als ich zuerst die unteren zwei Abfragen zuoberst anordnete, gings nicht. Kann mir bitte jemand erklären, wieso das so ist? |
#4
| |||
| |||
|
|
Das wird nicht funktionieren, denn FORM-Elemente haben ein name-Attribut, auf dessen Wert ebenfalls mit der name-Eigenschaft des Formularobjekts zugegriffen werden kann. Verwende daher einen anderen Namen für Dein Formularsteuerelement als "name". Meide auch die Namen und IDs "submit", "reset" usw., denn das sind Namen von Methoden des Formularobjekts, die Du so überlagern würdest. Wozu übergibst Du einen Wert an `form', wenn Du dann doch wieder proprietär und ineffizient `document.form' referenzierst? Siehe unten. Typkonvertierende Vergleiche mit `true' (`== true') sind unnötig ineffizient. window.alert(...); Lass uns das erst mal ins Reine schreiben: function pruefen(form) { /* * Die häufig benötigte Referenz in der Variablen zu speichern, * macht den Quelltext effizienter und leicher les-/wartbar. */ var els = form.elements; /* Name des Steuerelements wurde hier angepasst, siehe oben */ var name = els["feld_name"].value; var anfrage = els["anfrage"].value; if (els["kontakt"][0].checked && els["email"].value == "") { window.alert("Bitte tragen Sie Ihre E-Mailadresse ein."); return false; } if (els["kontakt"][1].checked && els["telefon"].value == "") { window.alert("Bitte tragen Sie Ihre Telefonnummer ein."); return false; } if ((name == "") || (name == " ") || (name == " ") || (name == " ")) { window.alert("Bitte geben Sie Ihren Namen an."); return false; } if ((anfrage == "") || (anfrage == " ") || (anfrage == " ") || (anfrage == " ")) { window.alert("Bitte füllen Sie das Feld \"Text\" aus."); return false; } } Zwar liesse sich hier noch einiges optimieren, zum Beispiel mit Regulären Ausdrücken beliebig viele Leerzeichen berücksichtigen, und das benutzerunfreundliche window.alert() zusammenzufassen oder gleich zugunsten von Markierungen im Dokument zu entsorgen. Zuvor steht jedoch die Frage, was Du mit "zuerst die unteren zwei Abfragen zuoberst [anordnen]" und "gings nich" meinst. Zum ersteren: Meinst Du damit, dass Du die beiden letzten if-Anweisungen vor die Variablendeklarationen schreibst? Das kann nicht wie gewünscht funktionieren, denn den Variablen wurden zwar deklariert (das findet vor der Ausführung statt) aber nicht explizit initialisiert. Schreibst Du hingegen die ersten beiden if-Anweisungen direkt nach den Variablendeklarationen, so funktioniert es mit Sicherheit wie vorher (nur wird eben zuerst auf den Feldwert geprüft und dann auf den Status des Kontrollkästchens oder des Radiobuttons). Zum letzteren: <http://glasgoogle.de/> und <http://getfirebug.com/ PointedEars |
![]() |
| Thread Tools | |
| Display Modes | |
| |