我正在进行JavaScript验证,但它';当我输入姓氏时,它不能正常工作,它不会显示错误并提交表单

我正在进行JavaScript验证,但它';当我输入姓氏时,它不能正常工作,它不会显示错误并提交表单,javascript,php,html,validation,Javascript,Php,Html,Validation,JavaScript代码: <script> function check_validation() { var Fname = document.frm.Fname.value; var Lname = document.frm.Lname.value; var error = 0; document.getElementById("error").inn

JavaScript代码:

<script>
        function check_validation()
        {
            var Fname = document.frm.Fname.value;
            var Lname = document.frm.Lname.value;
            var error = 0;
            document.getElementById("error").innerHTML = '';
            if (Fname == "")
            {
                var error = 1;
                document.getElementById("error").innerHTML += 'First name is required';
            }
            else
            {
               var error = 0;
            }
            if(Lname == "")
            {
                var error = 1;
                document.getElementById("error").innerHTML += 'Last name is required';
            }
            else
            {
                var error = 0;
            }
            if(error == 1)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
    </script>


<body>
    <div id="error">
    </div>
    <form name="frm">
        First name : <input type="text" name="Fname" />
        Last name : <input type="text" name="Lname" />

        <input type="submit" name="submit" onclick="return check_validation();" />
    </form>
</body>

函数检查\u验证()
{
var Fname=document.frm.Fname.value;
var Lname=document.frm.Lname.value;
var误差=0;
document.getElementById(“错误”).innerHTML='';
如果(Fname==“”)
{
var误差=1;
document.getElementById(“错误”).innerHTML+=“需要名字”;
}
其他的
{
var误差=0;
}
如果(Lname==“”)
{
var误差=1;
document.getElementById(“错误”).innerHTML+=“需要姓氏”;
}
其他的
{
var误差=0;
}
如果(错误==1)
{
返回false;
}
其他的
{
返回true;
}
}
名字:
姓氏:

当两个值都为空时,验证工作正常,但当我直接在表单中输入第二个值时,表单被提交。我找不到错误。

问题是,如果最后一个值有效,您正在重置错误标志,因此所有其他验证状态都将丢失

< > >代码> Fname <代码>为空白,然后将错误设置为<代码> 1 >代码>,但如果“代码> Lname < /代码>被填满,则将<代码>错误< /代码>的值设置为<代码> 0代码>,因此最后的验证状态检查只考虑代码的验证状态> Lname < /C> >所有先前的状态被忽略。

解决方案是在开始时设置标志初始值,然后仅在值无效时更新标志,如下所示。此外,如果您对标志使用
true/false
值,则无需在底部使用另一个
if…else

function check_validation() {
    var Fname = document.frm.Fname.value;
    var Lname = document.frm.Lname.value;
    var valid = true;
    document.getElementById("error").innerHTML = '';
    if (Fname == "") {
        valid = false;
        document.getElementById("error").innerHTML += 'First name is required';
    }
    if (Lname == "") {
        valid = false;
        document.getElementById("error").innerHTML += 'Last name is required';
    }
    return valid;
}

如果第二个错误是正确的,则将error设置为0,忽略第一个错误的值。顺便说一下,与其使用0/1,不如使用布尔值,这正是它们的用途。也不要多次设置错误(只要在var已经初始化时不要使用
var


谢谢你们的帮助,真的对我很有帮助,非常感谢你们的帮助,因为我必须在服务器上实现。
function check_validation()
        {
            var Fname = document.frm.Fname.value;
            var Lname = document.frm.Lname.value;
            var error = true;
            document.getElementById("error").innerHTML = '';
            if (Fname == "")
            {
                error = true;
                document.getElementById("error").innerHTML += 'First name is required';
            }
            if(Lname == "")
            {
                error = true;
                document.getElementById("error").innerHTML += 'Last name is required';
            }
            return error;
        }