0

我对 javascript 有点陌生,我开始了解这种编码机制是如何工作的。我创建了一个包含多个字段的简单 html 表单。我正在使用 javascript 从字段中获取数据并通过许多验证函数对其进行验证。以下代码是我目前使用的 javascript:

function Validation()  
{  
    submit_name = document.getElementById('txt_Name').value;
    submit_surname = document.getElementById('txt_Surname').value;
    submit_mobilenumber = document.getElementById('MobileNumber').value;


    if(checkName(submit_name))
        {
    if(checkSurname(submit_surname))
            {
    if(checkMobile(submit_mobilenumber))
                {
                } 
            }
        }
    return false;
}

我的问题是:在这段代码的情况下,主函数(Validation())会一一遍历所有单独的函数吗?

例如,如果 checkName() 函数返回 false,那么其他两个验证函数 checkSurname() 和 checkMobile() 会运行还是程序会在第一个处停止?

我提出问题的原因是,在所有验证函数都返回之后,我想添加另一个函数来将所有内容保存到文件中。但是,只有在所有表格都经过验证后才能这样做。任何帮助都非常感谢提前感谢。

4

4 回答 4

3

我宁愿使用一个验证器,它返回每个包含错误的字段,这样您就可以向用户显示哪些字段填写错误

function Validation() {
    var submit_name = document.getElementById('txt_Name').value,
        submit_surname = document.getElementById('txt_Surname').value,
        submit_mobilenumber = document.getElementById('MobileNumber').value,
        errors = [];

    if(!checkName(submit_name)) {
        errors.push({
            id: 'txt_Name',
            message: 'Name is required'
        });
    }

    if(!checkSurname(submit_surname)) {
        errors.push({
            id: 'txt_Surname',
            message: 'Surname is required'
        });
    }

    if(!checkMobile(submit_mobilenumber)) {
        errors.push({
            id: 'MobileNumber',
            message: 'Mobile number is required'
        });
    }

    return errors;
}

var errors = Validation();

if(errors.length === 0) {
    // No errors, do your stuff
} else {
    // Loop errors and do something
    for(var i = 0; i < errors.length; i++) {
        // can mark the element with document.getElementById(errors[i].id)
        alert(errors[i].message);
    }
}
于 2013-05-07T09:54:33.317 回答
2

程序将在第一个返回 false 的方法处停止,因为它们都包含在彼此中。因此,如果checkname()返回 false,validation()将返回 false,其他函数也是如此。

// if false, validate() returns false. if true, checksurname() called
if(checkName(submit_name))
{
    // if false, validate() returns false. if true, checkMobile() called
    if(checkSurname(submit_surname))
    {
        // if false, validate() returns false
        if(checkMobile(submit_mobilenumber))
        {
        }
    }
}
return false;

虽然正如dreamweiver所说,个人验证会更好:

if(checkname()&&checkmobile()&&checksurname())
{
    return true;
}
else
{
    return false;
}
于 2013-05-07T09:45:59.320 回答
2

验证的简单解决方案(不忽略其他检查功能)应该是:

function Validation()  
{  
    var booleanValidation = false;
    var check_submit_name = checkName(document.getElementById('txt_Name').value);
    var check_submit_surname = checkSurname(document.getElementById('txt_Surname').value);
    var check_submit_mobilenumber = checkMobile(document.getElementById('MobileNumber').value);

    if (check_submit_name === false || check_submit_surname === false || check_submit_mobilenumber === false) {
        booleanValidaation = false;
    } else if (check_submit_name === true && check_submit_surname === true && check_submit_mobilenumber === true) {
        booleanValidaation = true;
    }

    return booleanValidation;
}
于 2013-05-07T09:51:26.077 回答
0

如果 checkName(submit_name)将返回 false 则

if(checkName(submit_name)) 将变为if(false)条件为假,因此不会执行 if 条件代码。并且执行将不断。

这将适用于所有 if 条件。

于 2013-05-07T09:52:14.357 回答