Reputation: 1573
When my script validates a filled out form, it will check for errors one at a time rather than for all the errors all at once. I know this is because I'm using if
statements which will obviously stop when an argument validates as True
.
How do I adapt my script so that it will show the end-user all the errors in one go? Do I use the continue
statement? Or is there a better way?
function checkForm() {
if (!retext.test(document.myform.sport.value)) {
document.myform.textfield.style.border = "3.5px solid red";
document.getElementById("text").innerHTML = "Invalid text.";
document.getElementById("text").style.display = "block";
return false;
}
else if (!re.test(document.myform.email.value)) {
document.myform.email.style.border = "3.5px solid red";
document.getElementById("emailwarn").innerHTML = "Invalid email.";
document.getElementById("emailwarn").style.display = "block";
return false;
}
else if (!retel.test(document.myform.tel.value)) {
document.myform.tel.style.border = "3.5px solid red";
document.getElementById("telwarn").innerHTML = "Invalid telephone number.";
document.getElementById("telwarn").style.display = "block";
return false;
}
}
<form name="myform" method="POST" action="http://youtube.com" onsubmit="return checkForm()">
<fieldset>
<legend>Hi</legend>
<label>Random text: </label>
<input type="text" name="textfield">
<div id="text"></div>
<label>Email: </label>
<input type="email" name="email">
<div id="emailwarn"></div>
<label>Tel: </label>
<input type="tel" name="tel" maxlength="11">
<div id="telwarn"></div>
<input type="submit" value="Submit Form">
<input type="reset" value="Reset Form">
</fieldset>
</form>
Upvotes: 0
Views: 95
Reputation: 1253
Set a return value and return it at the end.
function checkForm() {
var valid = true;
if (!testcondition) {
// do stuff
valid = false;
}
if (!othertestcondition) {
// do stuff
valid = false;
}
return valid;
}
Upvotes: 0
Reputation: 32831
function checkForm() {
var ok = true;
if (!retext.test(document.myform.sport.value)) {
document.myform.textfield.style.border = "3.5px solid red";
document.getElementById("text").innerHTML = "Invalid text.";
document.getElementById("text").style.display = "block";
ok =false;
}
if (!re.test(document.myform.email.value)) {
document.myform.email.style.border = "3.5px solid red";
document.getElementById("emailwarn").innerHTML = "Invalid email.";
document.getElementById("emailwarn").style.display = "block";
ok =false;
}
if (!retel.test(document.myform.tel.value)) {
document.myform.tel.style.border = "3.5px solid red";
document.getElementById("telwarn").innerHTML = "Invalid telephone number.";
document.getElementById("telwarn").style.display = "block";
ok = false;
}
return ok;
}
Upvotes: 0
Reputation: 9072
You need to make the checkForm
function run all of the checks, and only have one return (at the end).
eg.
function checkForm() {
var valid = true;
if (!retext.test(document.myform.sport.value)) {
document.myform.textfield.style.border = "3.5px solid red";
document.getElementById("text").innerHTML = "Invalid text.";
document.getElementById("text").style.display = "block";
valid = false;
}
if (!re.test(document.myform.email.value)) {
document.myform.email.style.border = "3.5px solid red";
document.getElementById("emailwarn").innerHTML = "Invalid email.";
document.getElementById("emailwarn").style.display = "block";
valid = false;
}
if (!retel.test(document.myform.tel.value)) {
document.myform.tel.style.border = "3.5px solid red";
document.getElementById("telwarn").innerHTML = "Invalid telephone number.";
document.getElementById("telwarn").style.display = "block";
valid = false;
}
return valid;
}
Upvotes: 2