Felix Riesterer: Javascript Fehlermeldungen

Beitrag lesen

Lieber Chester Copperpott,

dann sollen alle Fehler in einer Alertbox erscheinen und nicht nacheinander eine Alertbox geöffnet werden.

das ist sinnvoll und auch relativ einfach machbar.

Wenn Du Deine checkmail-Funktion dahingehend erweiterst, dass sie einen zusätzlichen Parameter entgegennimmt, der dafür sorgt, dass sie selbst eine die Mailadresse betreffende Meldung ausgeben kann, dann ist es möglich, die checkall-Funktion checkmail ohne diesen Parameter aufzurufen, sodass dieser extra-Alert eben nicht kommt, sondern dass sie einfach alle ihre Fehler sammelt, bevor sie diese ausgibt.

In etwa so:

function checkmail (mail, giveFeedback) {  
    var ok = ([link:http://wiki.selfhtml.org/wiki/Referenz:JavaScript/Operatoren/Typenbestimmung@title=typeof] mail == "string" && mail.indexOf("@") > 0);  
  
    /* Der zweite Parameter muss irgendetwas enthalten, das als "true" gewertet werden kann.  
       In JavaScript sind das u.a. folgende Werte:  
       - true  
       - eine Zahl > 0  
       - ein String, der weder leer ist noch die Zahl null darstellt (z.b. "0.00")  
       - ein Array, welches mindestens ein Element enthält  
       - ein existierendes Objekt  
    */  
    if (giveFeedback) {  
        alert("Die Mailadresse erscheint fehlerhaft! Bitte überprüfen Sie Ihre Eingabe.");  
    }  
  
    return ok;  
}

Obige Funktion kann man nun so nutzen:

    var mailOk = checkmail("test-ohne-at.example.org"); // ergibt true|false ohne alert-Fenster  
  
    checkmail("adresse@example.org", true); // ignoriert Rückgabewert, erzeugt alert-Fenster

Deswegen brauche ich eine extra Funktion, die Alertbox aufruft und die Sammelvariable fehler ausgibt.

Nein. Da Du das über window.alert tust, brauchst Du das nicht. Wolltest Du später festlegen, wie Ausgaben an den User getätigt werden, dann kannst Du eine solche extra-Funktion schreiben, um Dich später gegen alert als Ausgabemethode zu entscheiden. Aber für dieses Beispiel...?

function checkall () {  
    var errors = []; // ein [link:http://wiki.selfhtml.org/wiki/Referenz:JavaScript/Array@title=Array] ist schöner, als ein simpler String  
  
    if (...) { // erstes Testkriterium gescheitert  
        errors.push("Meldung zu erstem Test");  
    }  
  
    if (...) { // zweites Testkriterium gescheitert  
        errors.push("Meldung zu zweitem Test");  
    }  
  
    // Mailadresse prüfen  
    if (!checkmail(document.Formular.mail.value)) { // ! invertiert true|false ins Gegenteil  
        errors.push("Die Mailadresse erscheint fehlerhaft!");  
    }  
  
    // Ausgabe aller Fehler  
    outputAllErrors(errors);  
  
    return errors.length < 1;  
}

Wenn Du Fehler in Deinem Array gesammelt hast, dann hat sich seine length-Eigenschaft von null auf mindestens eins erhöht. Wenn dem so ist, dann will man ja ein "return false" haben. Das "false" aber bedeutet ja in diesem Zusammenhang nichts anderes, als dass fehler.length eben > 0 geworden ist. Daher kann ich das verkürzt wie oben notieren.

Die Funktionen für den Tooltip hab ich einfach nur irgendwo rauskopiert und eingebastelt.

Es ist grundsätzlich besser, wenn man genau weiß, was man tut. Ohne Tooltip hättest Du Dich mehr dem Verständnis der funktionalen Gestaltung gewidmet, aber Anfänger setzen immer einen so immensen Wert darauf, wie es aussieht...

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)