返回多个功能

use*_*389 3 javascript

我是javascript的新手,所以我很抱歉,如果这完全是错的,但我现在正在尝试验证表单,并且我有简单的测试功能.我希望函数validateForm()返回所有三个函数checkName(),checkEmail和checkMessage().我有validateForm()函数的方式,它只运行checkName()函数.有任何想法吗?

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();

}
Run Code Online (Sandbox Code Playgroud)

小智 8

 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*/;
           },
       };
  }
Run Code Online (Sandbox Code Playgroud)

您可以按如下方式调用它。

yourdomain.validateFormField.validateName()

或者

yourdomain.validateFormField.validateMail()

或者

yourdomain.validateFormField.validateMsg()

取决于需要。


Dmi*_*kiy 5

运算符&&执行左操作数(在您的情况下为checkName),如果为false,则立即返回false而不执行右操作数.因此,您需要手动执行每个功能,然后才能通过&&连接它们.

function validateForm(){
    var a = checkName();
    var b = checkEmail();
    var c = checkMessage();
    return a && b && c;
}
Run Code Online (Sandbox Code Playgroud)


Rob*_*obB 1

由于短路评估,您当前的方式尝试按顺序评估它们。如果其中一项返回 false,则该过程结束。

短路表达式 x Sand y(使用 Sand 表示短路变体)等价于条件表达式 if x then y else false;表达式 x Sor y 等价于 if x then true else y。

您想要单独调用函数来执行每项检查:

function validateForm(){
    var results = [];
    result[0] = checkName();
    result[1] = varcheckEmail();
    result[2] = checkMessage();
}
Run Code Online (Sandbox Code Playgroud)