我正在为网站注册表单进行一些表单验证,我有一个调用其他函数的函数。它调用的每个函数都会进行一些验证,但是当它进入最终函数时它会跳过它!
function validateForm() {
if (usernameVal() === false) { return false; }
if (emailRegexVal() === false) { return false; }
if (emailMatchVal() === false) { return false; }
if (pwMatchVal() === false) { return false; }
else { return true; }
}
function usernameVal() {
var x = document.forms['Form']['Username'].value;
if (x === '') {
alert('username must be filled out');
return false;
}
}
function emailMatchVal() {
var x = document.forms['Form']['Email_1'].value;
var y = document.forms['Form']['Email_2'].value;
if (x !== y) {
alert('Email Addresses do not match');
return false;
}
}
function emailRegexVal() {
var x = document.forms['Form']['Email_1'].value;
var regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
var valid = regex.test(x);
if (!valid) {
alert('Invalid email address!');
return false;
}
}
function pwMatchVal() {
var x = document.forms['Form']['pw1'].value;
var y = document.forms['Form']['pw2'].value;
if (x !== y) {
alert('Your passwords do not match!');
return false;
}
}
因此,当我单击提交按钮时,它会执行用户名检查,电子邮件的正则表达式,电子邮件检查,然后通过事物的外观尝试提交表单pwMatchVal()函数。有任何想法吗?感谢。
答案 0 :(得分:1)
你拥有它的方式,如果这些函数中的任何一个返回false,整个(validateForm)将退出。因此,如果倒数第二个函数返回false,则确实不会调用最后一个函数。
您需要先调用每个函数,保存结果,然后在调用每个验证函数后,然后发出return语句。
看起来应该是这样的
function validateForm() {
var v1 = (usernameVal() === false);
var v2 = (emailRegexVal() === false);
var v3 = (emailMatchVal() === false);
var v4 = (pwMatchVal() === false);
return v1 && v2 && v3 && v4;
}