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>
当两个值都为空时验证工作正常,但是当我直接在表单中输入第二个值时提交表单。我找不到错误。
答案 0 :(得分:2)
问题是如果最后一个值有效,则重置错误标志,因此所有其他验证状态都将丢失。
假设Fname
为空,然后错误设置为1
,但如果填充Lname
,则将error
的值设置回{{1}因此,最后一次验证状态检查将仅考虑0
的验证状态,忽略所有先前的状态。
解决方案是在开头设置标志初始值,然后仅在值无效时更新标志,如下所示。此外,如果您对该标志使用Lname
值,则无需在底部使用另一个true/false
块。
if...else
答案 1 :(得分:0)
如果第二个错误正确,则将错误设置为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;
}