当javascript中的一个检查无效时,表单验证会中断

当javascript中的一个检查无效时,表单验证会中断,javascript,validation,Javascript,Validation,我有一个表单,其中包含两个textarea,每个都涉及一组邮件 <form name="myform" action='entryupdate.php' method="post"> <textarea name="mailgroup1" rows="2" cols="50" onchange="checkFormValue();"> </textarea> <textarea name="mailgroup2" rows="2"

我有一个表单,其中包含两个textarea,每个都涉及一组邮件

<form name="myform" action='entryupdate.php' method="post">
    <textarea name="mailgroup1" rows="2" cols="50" onchange="checkFormValue();">
    </textarea>
    <textarea name="mailgroup2" rows="2" cols="50" onchange="checkFormValue();">
    </textarea>
    <input name="update" type="submit" value="Update description"/>
</form>
当某个文本区域中的值发生更改时,将调用以下函数,检查是否有任何值格式不正确,如果是,则禁用“提交”按钮

function checkFormValue(){
    var validform = true;
    validform = validform && checkmail(document.myform.mailgroup1) && checkmail(document.myform.mailgroup2);
    document.hotfixomat.update.disabled = !validform;
}

问题是,如果第一次检查返回false,则未进行第二次检查,如果值的格式不正确,则未进行更改。(但“提交”按钮已禁用)。为什么检查被中断?

这就是为什么要在最后一位获取
有效形式的
变量。JavaScript与许多其他语言一样工作,如果它不可能为真,则不会在布尔值
中进一步:

var validform = true;
validform = validform && checkmail(document.myform.mailgroup1) && checkmail(document.myform.mailgroup2);
如果第一个
checkmail()
为false,则不必执行第二个,因为
validform
不可能为true。如果设置
var validform=false
,则它甚至不会执行任何checkmail函数

例如:

如果要确保两个都被调用,则可以将其拆分并执行以下操作:

var validForm1 = checkmail(document.myform.mailgroup1),
    validForm2 = checkmail(document.myform.mailgroup2),
    validForm = validForm1 && validForm2;
或者,您可以更改方法,使其遍历所有要验证的元素,并更改一个变量并返回该变量

一个基本的例子:

function checkmailElements(myarray){
    var returnVal = true;

    for(var i = 0; i< myarray.length; i++){
        if( !checkmail(myarray[i]) ){
            returnVal = false;
        }
    }

    returnVal;
}
函数checkmailElements(myarray){
var returnVal=true;
对于(var i=0;i
var validForm1 = checkmail(document.myform.mailgroup1),
    validForm2 = checkmail(document.myform.mailgroup2),
    validForm = validForm1 && validForm2;
function checkmailElements(myarray){
    var returnVal = true;

    for(var i = 0; i< myarray.length; i++){
        if( !checkmail(myarray[i]) ){
            returnVal = false;
        }
    }

    returnVal;
}