5

私はJavaScriptを初めて使用するので、これがまったく間違っている場合はお詫びしますが、現在フォームを検証しようとしており、テスト用の簡単な機能があります. 関数 validateForm() が関数 checkName()、checkEmail、および checkMessage() の 3 つすべてを返すようにします。私が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();

}
4

7 に答える 7

8

演算子 && は左オペランド (この場合は checkName) を実行し、false の場合は、右オペランドを実行せずにすぐに false を返します。そのため、各関数を手動で実行してから && 経由で接続する必要があります。

function validateForm(){
    var a = checkName();
    var b = checkEmail();
    var c = checkMessage();
    return a && b && c;
}
于 2012-07-08T18:14:43.717 に答える
4
 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()

必要に応じて。

于 2013-09-25T04:30:24.660 に答える
1

あなたが遭遇するものは短絡と呼ばれます。Javascript の論理演算子は短絡を行います。つまり、式がtest1() && test2()あり、最初の関数が false を返す場合、2 番目の関数が何を返すかに関係なく、式全体が常に false と評価されます。したがって、2 番目の関数は呼び出されません。ただし、最初の関数が true を返した場合、実際には式の評価に影響するため、2 番目の関数が呼び出されます。

したがって、checkName()false を返す場合、他の関数は呼び出されません。true が返された場合、checkEmail()呼び出されます。それも true を返す場合は、 thencheckMessages()も呼び出されます。ただし、いずれかの関数が false を返す場合、残りの関数は短絡のために評価されません。

于 2012-07-08T18:18:06.953 に答える
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();
}
于 2012-07-08T18:13:44.753 に答える
1

私のJavaScriptプロジェクトでは、これを行いました。

return {
   checkName : checkName,
   checkEmail : checkEmail,
   checkMessage : checkMessage,
   validateForm : validateForm
};
于 2016-05-23T02:27:32.023 に答える
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;
}
于 2014-04-10T14:16:01.447 に答える
0

checkName() が false の場合、結果が false のままであるため、他の関数は実行されません。

于 2012-07-08T18:15:19.583 に答える