HighDots Forums  

Reihenfolge von Abfragen

Javascript (German) Programmiersprache JavaScript. (de.comp.lang.javascript)


Discuss Reihenfolge von Abfragen in the Javascript (German) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Dani Maier
 
Posts: n/a

Default Reihenfolge von Abfragen - 11-01-2009 , 04:14 AM






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;

if ((document.form.kontakt[0].checked == true) &&
(document.form.email.value == ""))
{
alert("Bitte tragen Sie Ihre E-Mailadresse ein!");
return false;
}

if ((document.form.kontakt[1].checked == true) &&
(document.form.telefon.value == ""))
{
alert("Bitte tragen Sie Ihre Telefonnummer ein!");
return false;
}


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?
Vielen Dank schonmal im Voraus!

Gruss Dani

Reply With Quote
  #2  
Old   
Thomas 'PointedEars' Lahn
 
Posts: n/a

Default Re: Reihenfolge von Abfragen - 11-01-2009 , 05:29 AM






Dani Maier wrote:

Quote:
[...] 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;
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.

Quote:
var anfrage = document.form.anfrage.value;
Wozu übergibst Du einen Wert an `form', wenn Du dann doch wieder proprietär
und ineffizient `document.form' referenzierst? Siehe unten.

Quote:
if ((document.form.kontakt[0].checked == true) &&
Typkonvertierende Vergleiche mit `true' (`== true') sind unnötig
ineffizient.

Quote:
[...]
if ((name == "") || (name == " ") || (name == " ") || (name == "
"))
{
alert("Bitte geben Sie Ihren Namen an!");
window.alert(...);

Quote:
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?
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 == " ")
Quote:
| (name == " "))
{
window.alert("Bitte geben Sie Ihren Namen an.");
return false;
}

if ((anfrage == "") || (anfrage == " ") || (anfrage == " ")
Quote:
| (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

Reply With Quote
  #3  
Old   
J. Strübig
 
Posts: n/a

Default Re: Reihenfolge von Abfragen - 11-02-2009 , 04:53 AM



Dani Maier schrieb:
Quote:
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 ist mit vermutlich falsch. Was ist der Parameter form?
Warum document.form?

Quote:
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?
Die Fehlerkonsole ist leer?

Struppi.

Reply With Quote
  #4  
Old   
Dani Maier
 
Posts: n/a

Default Re: Reihenfolge von Abfragen - 11-03-2009 , 04:03 AM



Vielen Dank Thomas, habs so gemacht wie beschrieben und nun gehts auch.

Danke nochmals!
Gruss Dani

Thomas 'PointedEars' Lahn schrieb:
Quote:
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

Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.