【发布时间】:2015-07-20 10:28:41
【问题描述】:
当我提交有错误的表单时(例如用户没有填写必填字段),我能够显示错误消息。但是,如果我更正其中一个字段并再次提交,则仍然存在两个错误消息。
只有正确填写所有字段时才会出现错误。
我做错了什么?
如果我更正一个字段并单击提交,我会看到更正字段的错误消息会消失,只有提醒不正确的字段才会有错误消息。
HTML:
<form id="frm1">
<fieldset id="controls">
<div>
<label for="firstname">First Name: </label>
<input type="text" id="firstname">
<span id="errFname" class="errmsg">* You must enter a first name</span>
</div>
<div>
<label for="lastname">Last Name: </label>
<input type="text" id="lastname">
<span id="errLname" class="errmsg">* You must enter a first name</span>
</div>
<div>
<input type="submit" value="Submit">
</div>
</fieldset>
</form>
脚本:
function checkForm(){
document.getElementById("frm1").addEventListener("submit", function(e) {
var errors = [];
//Validate first name: Required, Alphabetic (no numbers)
if(document.getElementById("firstname").value === "") {
document.getElementById("errFname").style.display = "inline";
document.getElementById("firstname").focus();
errors.push("required");
}//close if
var alphaRegEx = /^[a-zA-Z]+$/;;
var alphafname = document.getElementById("firstname").value;
var alphalname = document.getElementById("lastname").value;
//check if first name has any digits
if (!alphaRegEx.test(alphafname)){
document.getElementById("errFname").style.display = "inline";
document.getElementById("firstname").value="";
document.getElementById("firstname").focus();
errors.push("numeric");
}//close if
//check if last name has any digits
if (!alphaRegEx.test(alphalname)){
document.getElementById("errLname").style.display = "inline";
document.getElementById("lastname").value="";
document.getElementById("lastname").focus();
errors.push("numeric");
}//close if
//If you want, you can do something with your errors, if not, just return
if (errors.length > 0) {
e.preventDefault();
return false;
}
return true;
});//close function
}//close function (checkForm)
window.onload=checkForm;
【问题讨论】:
-
你的
alphaRegEx是错误的,它只验证第一个符号,正则表达式应该是/^[a-zA-Z]+$/ -
你真的需要停止用“close if”、“close function”等来评论右括号,因为它们是无用的。
标签: javascript forms