Schhönheitsfehler im JavaScript
André Laugks
Hallo!
Ich habe da nochmal eine Frage. Ich sitze gerade stolz wie Oskar vor vor meiner Kiste, und freue mich, das mein "fast erstes" JavaScript funktioniert! Natürlich mit Hilfe von Forumsbesuchern. Die Lösung lieferte Christine <t02504.htm#a11779>.
OK, schön und gut. Als ich es einbauen wollte, ist mir in den Sinn gekommen, was ist, wenn jemand seine Emailadresse nicht angibt. Der bekommt ja eine Meldung ohne Emailadresse.
Also frikelte ich noch was dazu. Was gedauert hat, und viel Nerven gekostet hat. Entnommen aus <../../tedf.htm>
<script language="JavaScript">
<!--
function richtig() {
if (document.emailrichtig.email.value == " ");
else { return confirm("Ist diese Emailadresse " + document.emailrichtig.email.value + " richtig?") };
}
-->
</script>
Wenn jetzt die Emailadresse nicht eingetragen wird, wird confirm nicht aufgerufen. Einige meiner Besucher liefern auch oft ein Statment über das Kontaktformular, ohne die Emailadresse anzugeben.
Was ich jetzt eigentlich fragen möchte, gibt es an diesem JavaScript irgend welche Schöhnheitsfehler. Es funktioniert in IE4.* und Netscape 4.*. Ich bin mir was unsicher, ob es unter Umständen zu blöden Fehlermeldungen kommen kann.
Keine Angst, ich frage jetzt nicht bei jedem JS ob es korekt ist, aber bei meinem "fast ersten" bin ich mir was unsicher.<g>
Für ein kleines Statment währe ich dankbar!
Vielen Dank, André
PS: Im großen und ganzen zeigt es mir, ein paar Kapitel in meinem JavaScript Buch nochmal zu lesen.
Hi André,
if (document.emailrichtig.email.value == " ");
hier wird offenbar geprüft, ob ein Leerzeichen angegeben wurde. Ich bin mir nicht sicher (inzwischen auf Perl spezialisiert *g*), aber auch in JavaScript dürfte ein Leerzeichen nicht gleich einem leeren String sein!
In der gleichen Stelle steckt aber noch etwas, was Du wohl mit Schönheitsfehler meintest: Die Anweisung "wenn etwas zutrifft dann tue." Klingt 'n bißchen komisch, aber genau das steht dort. Formuliere es lieber um, indem Du den else-Teil zum if-Teil machst:
if (document.emailrichtig.email.value != "") {
return confirm usw.
}
Ich bin nicht sicher, ob Du einen else-Teil brauchst, aber der müßte dann "else return true;" lauten.
Ich denke das wär's... aber der ungeschlagene Profi ist hier eindeutig Christine, warte also erst mal, was sie dazu sagt :-)
Cheatah
Hallo Cheatah!
if (document.emailrichtig.email.value == " ");
hier wird offenbar geprüft, ob ein Leerzeichen angegeben wurde. Ich bin mir nicht sicher (inzwischen auf Perl spezialisiert *g*), aber auch in JavaScript dürfte ein Leerzeichen nicht gleich einem leeren String sein!
Ich habe es mit und ohne Leerzeichen versucht! (siehe zwei Absätze tiefer)
In der gleichen Stelle steckt aber noch etwas, was Du wohl mit Schönheitsfehler meintest: Die Anweisung "wenn etwas zutrifft dann tue." Klingt 'n bißchen komisch, aber genau das steht dort. Formuliere es lieber um, indem Du den else-Teil zum if-Teil machst:
Ist das nicht der Sinn einer if-Abfrage. Wenn etwas zutrieft, dann mache bitte das! Wenn nicht, das lasse es bitte und gehe zur anderen if-Abfrage.
Wenn eine Emailadresse angebenen ist, fragen mit confirm(), ob die Emailadresse richtig ist. Wenn keine Emailadresse angegeben ist, nerve nicht den Besucher mit einem Fenster in dem keine Emailadresse steht, überspringe confirm() und sende gleich ab.
if (document.emailrichtig.email.value != "") {
Ich habe es eben noch mal mit allen Möglichkeiten probiert! Wenn man kein Leerzeichen zwischen läßt .(value != ""), wird immer das confirmFenster raus geschmießen, egal ob eine Emailadresse angegeben ist oder nicht! Mit einem Leerzeichen, nur dann, wenn eine Emailadresse angegeben ist!
Für mich scheint es logisch, er schaut nach, ob in diesem "Leerzeichen" etwas steht.
Ich bin nicht sicher, ob Du einen else-Teil brauchst, aber der müßte dann "else return true;" lauten.
else muß bleiben!
Die geschweiften Klammern bei else kann ich mir sparen.
if (document.emailrichtig.email.value != "")
So wird confirm() immer gestartet, ob eine Adresse angegeben ist oder nicht!
if (document.emailrichtig.email.value == " ")
So wird confirm() nur gestartet, wenn eine Emailadresse angegeben ist!
Naja es futzt,aber sicher bin ich mir eben nicht.
André
Hallo!
Na, da ist mir ein Fehler unterlaufen!
if (document.emailrichtig.email.value != "")
So wird confirm() immer gestartet, ob eine Adresse angegeben ist oder nicht!if (document.emailrichtig.email.value == " ")
So wird confirm() nur gestartet, wenn eine Emailadresse angegeben ist!
if (document.emailrichtig.email.value != " ")
So wird confirm() nur gestartet, wenn keine Emailadresse angebene ist!
-ist keine Emailadresse angegeben, dann starte bitte confirm() (was ja falsch ist)
if (document.emailrichtig.email.value == " ")
So wird confirm() nur gestartet, wenn eine Emailadresse angegeben ist!
-ist eine Emailadresse angegeben, dann starte bitte confirm() (was ja richtig ist)
André
Hi,
if (document.emailrichtig.email.value == " ");
In der gleichen Stelle steckt aber noch etwas, was Du wohl mit Schönheitsfehler meintest: Die Anweisung "wenn etwas zutrifft dann tue." Klingt 'n bißchen komisch, aber genau das steht dort. Formuliere es lieber um, indem Du den else-Teil zum if-Teil machst:Ist das nicht der Sinn einer if-Abfrage. Wenn etwas zutrieft, dann mache bitte das! Wenn nicht, das lasse es bitte und gehe zur anderen if-Abfrage.
ja, aber sieh Dir die Formulierung noch mal an. Es ist so, als würde jemand Dir sagen: "Wenn Du bis um 12 Uhr zu hause bist, dann mach bitte. Wenn nicht, ruf mich an." Du hast hinter "if" keine Aktion gesetzt! Er soll einfach nur tun. Sinnvoller wäre: "Wenn Du bis 12 Uhr noch nicht zu hause bist, ruf mich bitte an."
Ich habe es eben noch mal mit allen Möglichkeiten probiert! Wenn man kein Leerzeichen zwischen läßt .(value != ""), wird immer das confirmFenster raus geschmießen, egal ob eine Emailadresse angegeben ist oder nicht! Mit einem Leerzeichen, nur dann, wenn eine Emailadresse angegeben ist!
Für mich scheint es logisch, er schaut nach, ob in diesem "Leerzeichen" etwas steht.
Für mich ist das unlogisch, denn er schaut, ob die Adresse ein Leerzeichen ist. Ich kann nicht verstehen, daß es so, wie Du es gemacht hast, funktioniert. Theoretisch ergibt das keinen Sinn!
Naja es futzt,aber sicher bin ich mir eben nicht.
Ich verstehe zwar nicht warum, aber hauptsache es klappt :-)
Cheatah
Hallo André!
OK, schön und gut. Als ich es einbauen wollte, ist mir in den Sinn gekommen, was ist, wenn jemand seine Emailadresse nicht angibt. Der bekommt ja eine Meldung ohne Emailadresse.
Schau mal auf <../../tebj.htm#a24> nach...
Dort ist so eine Funktion, die Du zusätzlich zu Deiner "confirm"-Abfrage einbauen kannst.
Bis danndann
PAF (patrickausfrankfurt)
P.S.: ich benutze die SELFHTML-JAVA-Volltextsuche, die vor einiger Zeit hier vorgestellt wurde... man findet ruckzuck was man aus SELFHTML braucht...
Hallo,
function richtig() {
if (document.emailrichtig.email.value == " ");
else { return confirm("Ist diese Emailadresse " + document.emailrichtig.email.value + " richtig?") };
}
Na ja.
Dass die Abfrage, sagen wir mal - nicht besonders geschickt - ist, haben andere schon geschrieben. Aber sie ist nicht falsch.
Ein paar andere kleine Ecken und Kanten gibt es aber noch.
Du gibst bei " " keinen return-Wert mehr an. Wo hast Du false gelassen?
Das wird gebraucht, um das Absenden zu verhindern.
Du fragst nur auf " " ab, also den Fall, in dem der Besucher gar nichts getan hat.
" " war Deine Vorgabe aus
<INPUT TYPE="text" NAME="email" value=" " ...
Was du damit nicht greifst, ist z.B. der Fall, in dem der Besucher Dein Leerzeichen rausgenommen oder eigene dazugepackt hat.
Was koennte man bei EMail-Adressen so pruefen?
z.B.
1. Die Laenge des Strings. Also unter 5 Zeichen geht es IMHO wirklich nicht
document.emailrichtig.email.value.length liefert die Laenge
2. Ob "@" und "." vorkommen. Die muessen wohl sein.
Wenn document.emailrichtig.email.value.length.indexOf('@') < 0 ist, dann heisst das,
"@" ist nicht drin.
3. Vielleicht faellt Dir noch mehr ein. Muss aber IMHO nicht sein. Du willst ja nur die groebsten
Schnitzer vermeiden.
Ausserdem wuerde ich dem Besucher sagen, dass er offensichtlich was falsch gemacht hat, damit er weiss, dass da nichts passiert bevor er korrigiert.
Wie koennte man das, was ich da als Beispiel angegeben habe, im Script unterbringen?
function richtig()
{
var X = document.emailrichtig.email.value; /* nur wegen der kuerzeren Schreibweise */
if ((X.length < 5) || (X.indexOf('@') < 0) || (X.indexOf('.') < 0))
{
alert("Da stimmt wohl was nicht");
return false;
}
else
return confirm("Ist diese Emailadresse " + document.emailrichtig.email.value + " richtig?");
}
Guck Dir das mal ein bisschen genauer an und mach dann das daraus, was Du haben moechtst.
BTW: ich faende <INPUT TYPE="text" NAME="email" value="" ... besser.
PS: Im großen und ganzen zeigt es mir, ein paar Kapitel in meinem JavaScript Buch nochmal zu lesen.
Schadet ganz sicher nie. Man lernt immer was dazu.
Das meine ich ganz ernst und ehrlich ohne jeden Unterton.
Darf ich gleich noch einen Tip dazuliefern?
Vor allem Beispiele nicht nur abschreiben, sich daran erfreuen, dass sie funktionieren, sondern versuchen zu verstehen, ruhig mal daran rumdrehen.
Christine