返回多个功能

时间:2012-07-08 18:10:31

标签: 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();

}

7 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

 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*/;
           },
       };
  }

您可以将其称为贝娄。

yourdomain.validateFormField.validateName()

yourdomain.validateFormField.validateMail()

yourdomain.validateFormField.validateMsg()

取决于需要。

答案 2 :(得分:1)

在我的javascript项目中,我做到了这一点。

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

答案 3 :(得分:0)

由于short-circuit evaluation,您目前的方式会尝试按顺序评估它们。如果其中一个项返回false,则该过程结束。

  

短路表达式x Sand y(使用Sand表示   短路种类)相当于条件表达式if   x然后y其他错误;表达式x Sor y等于if x then   其他是真的。

您想分别调用这些函数来执行每项检查:

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

答案 4 :(得分:0)

如果checkName()为false,则不会执行其他函数,因为结果仍为false。

答案 5 :(得分:0)

您遇到的是短路。 Javascript逻辑运算符会短路。这意味着如果你有表达式test1() && test2()并且第一个函数返回false,那么整个表达式将总是计算为false,然而第二个函数返回的是什么。因此,永远不会调用第二个函数。如果第一个函数返回true,则会调用第二个函数,因为它实际上会影响表达式的计算。

因此,如果checkName()返回false,则不调用其他函数。如果返回true,则将调用checkEmail()。如果它也返回true,那么也将调用checkMessages()。但是,如果任何函数返回false,则由于短路而不会评估其余函数。

答案 6 :(得分:0)

我和其他人有点不同。创建了一个数组,添加了我的验证方法的所有结果,并比较了每个值(AND);

function ValidateInputs() {
    var arrValidations = new Array();

    arrValidations.push(ValidateProponentDocument());
    arrValidations.push(ValidateProponentName());
    arrValidations.push(ValidateProponentBirthdate());

    var ret = true;
    $.each(arrValidations, function (index, item) {
        ret &= item;
    });      

    return ret;
}