5 Stimmen

Mehrere Funktionen zurückgeben

Ich bin neu in Javascript, so entschuldige ich mich, wenn dies alles völlig falsch ist, aber ich versuche, ein Formular im Moment zu validieren, und ich habe die einfachen Funktionen für die Prüfung. Ich möchte, dass die Funktion validateForm() alle drei Funktionen checkName(), checkEmail, und checkMessage() zurückgibt. So wie ich die Funktion validateForm() habe, führt sie nur die Funktion checkName() aus. Hat jemand eine Idee?

function checkName(){

    var name=document.forms["contactForm"]["Name"].value;

    if(name==null || name==""){
        $("input#name").css("border-color", "#ff0000");
        $("input#name").attr("placeholder","Your name is required");
        return false;    
    }    
    else {
        $("input#name").css("border-color", "#00a8ff");
        $("input#name").attr("placeholder","");
        return true;
    }    
}

function checkEmail(){

    var email=document.forms["contactForm"]["Email"].value;

    if(email==null || email==""){
        $("input#email").css("border-color", "#ff0000");
        $("input#email").attr("placeholder","Your email is required");
        return false;    
    }    
    else {
        $("input#email").css("border-color", "#00a8ff");
        $("input#email").attr("placeholder","");
            return true;
        }
}

function checkMessage(){

    var message=document.forms["contactForm"]["Message"].value;

    if(message==null || message==""){
        $("textarea#message").css("border-color", "#ff0000");
        $("textarea#message").attr("placeholder","Your message is required");
        return false;    
    }    
    else {
        $("textarea#message").css("border-color", "#00a8ff");
        $("textarea#message").attr("placeholder","");
        return true;
    }
}

function validateForm(){

    return checkName() && checkEmail() && checkMessage();

}

9voto

Dmitry Osinovskiy Punkte 9779

Der Operator && führt den linken Operanden (in Ihrem Fall checkName) aus und gibt, wenn er falsch ist, sofort false zurück, ohne den rechten Operanden auszuführen. Sie müssen also jede Ihrer Funktionen manuell ausführen und sie erst dann über && verbinden.

function validateForm(){
    var a = checkName();
    var b = checkEmail();
    var c = checkMessage();
    return a && b && c;
}

8voto

Rajib Banerjee Punkte 41
 var yourdomain = {};
 yourdomain.validateFormField = function(){
 var domNameElement = document.getElementById("name");
 var domMailElement = document.getElementById("mail");
 var domMsgElement  = document.getElementById("msg");

 return {
           validateName: function (){
           /*your checkName() code goes here with a function return*/;
           `enter code here`},

           validateMail: function (){
            /*your checkEmail() code goes here with a function return*/;
           },

           validateMsg: function (){
            /*your checkMessage() code goes here with a function return*/;
           },
       };
  }

Sie können es wie folgt aufrufen.

yourdomain.validateFormField.validateName()

oder

yourdomain.validateFormField.validateMail()

oder

yourdomain.validateFormField.validateMsg()

je nach Bedarf.

1voto

Robert Punkte 8628

Bei der aktuellen Version wird versucht, sie in der Reihenfolge zu bewerten, in der sie Kurzschlussauswertung . Wenn eines der Elemente false zurückgibt, wird der Vorgang beendet.

Der Kurzschlussausdruck x Kurzschluss-Sorte) ist äquivalent zu dem bedingten Ausdruck if x then y else false; der Ausdruck x Sor y ist äquivalent zu if x then wahr sonst y.

Sie möchten die Funktionen separat aufrufen, um jede Prüfung durchzuführen:

function validateForm(){
    var results = [];
    result[0] = checkName();
    result[1] = varcheckEmail();
    result[2] = checkMessage();
}

1voto

Daniel Baulig Punkte 10294

Was Sie erleben, nennt man Kurzschluss. Logische Javascript-Operatoren machen Kurzschlüsse. Das heißt, wenn Sie den Ausdruck test1() && test2() und die erste Funktion gibt false zurück, dann wird der gesamte Ausdruck immer als false ausgewertet, egal was die zweite Funktion zurückgibt. Somit wird die zweite Funktion nie aufgerufen. Wenn die erste Funktion true zurückgibt, wird die zweite Funktion jedoch aufgerufen, da sie die Auswertung des Ausdrucks tatsächlich beeinflusst.

Wenn also checkName() false zurück, dann werden die anderen Funktionen nicht aufgerufen. Wenn sie true zurückgibt, dann checkEmail() aufgerufen werden. Wenn sie ebenfalls true zurückgibt, dann checkMessages() wird ebenfalls aufgerufen. Wenn jedoch eine der Funktionen false zurückgibt, werden die übrigen Funktionen aufgrund eines Kurzschlusses nicht ausgewertet.

1voto

In meinem Javascript-Projekt habe ich dies getan.

return {
   checkName : checkName,
   checkEmail : checkEmail,
   checkMessage : checkMessage,
   validateForm : validateForm
};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X