我是javascript的新手,所以我很抱歉,如果这完全是错的,但我现在正在尝试验证表单,并且我有简单的测试功能。我希望函数validateForm()返回所有三个函数checkName(),checkEmail和checkMessage()。我有validateForm()函数的方式,它只运行checkName()函数。有什么想法吗?
function checkName(){
var name=document.forms["contactForm"]["Name"].value;
if(name==null || name==""){
$("input#name").css("border-color", "#ff0000");
$("input#name").attr("placeholder","Your name is required");
return false;
}
else {
$("input#name").css("border-color", "#00a8ff");
$("input#name").attr("placeholder","");
return true;
}
}
function checkEmail(){
var email=document.forms["contactForm"]["Email"].value;
if(email==null || email==""){
$("input#email").css("border-color", "#ff0000");
$("input#email").attr("placeholder","Your email is required");
return false;
}
else {
$("input#email").css("border-color", "#00a8ff");
$("input#email").attr("placeholder","");
return true;
}
}
function checkMessage(){
var message=document.forms["contactForm"]["Message"].value;
if(message==null || message==""){
$("textarea#message").css("border-color", "#ff0000");
$("textarea#message").attr("placeholder","Your message is required");
return false;
}
else {
$("textarea#message").css("border-color", "#00a8ff");
$("textarea#message").attr("placeholder","");
return true;
}
}
function validateForm(){
return checkName() && checkEmail() && checkMessage();
}
答案 0 :(得分:5)
运营商&&执行左操作数(在您的情况下为checkName),如果为false,则立即返回false而不执行右操作数。因此,您需要手动执行每个功能,然后才能通过&&。
连接它们function validateForm(){
var a = checkName();
var b = checkEmail();
var c = checkMessage();
return a && b && c;
}
答案 1 :(得分:2)
var yourdomain = {};
yourdomain.validateFormField = function(){
var domNameElement = document.getElementById("name");
var domMailElement = document.getElementById("mail");
var domMsgElement = document.getElementById("msg");
return {
validateName: function (){
/*your checkName() code goes here with a function return*/;
`enter code here`},
validateMail: function (){
/*your checkEmail() code goes here with a function return*/;
},
validateMsg: function (){
/*your checkMessage() code goes here with a function return*/;
},
};
}
您可以将其称为贝娄。
yourdomain.validateFormField.validateName()
或
yourdomain.validateFormField.validateMail()
或
yourdomain.validateFormField.validateMsg()
取决于需要。
答案 2 :(得分:1)
在我的javascript项目中,我做到了这一点。
return {
checkName : checkName,
checkEmail : checkEmail,
checkMessage : checkMessage,
validateForm : validateForm
};
答案 3 :(得分:0)
由于short-circuit evaluation,您目前的方式会尝试按顺序评估它们。如果其中一个项返回false,则该过程结束。
短路表达式x Sand y(使用Sand表示 短路种类)相当于条件表达式if x然后y其他错误;表达式x Sor y等于if x then 其他是真的。
您想分别调用这些函数来执行每项检查:
function validateForm(){
var results = [];
result[0] = checkName();
result[1] = varcheckEmail();
result[2] = checkMessage();
}
答案 4 :(得分:0)
如果checkName()为false,则不会执行其他函数,因为结果仍为false。
答案 5 :(得分:0)
您遇到的是短路。 Javascript逻辑运算符会短路。这意味着如果你有表达式test1() && test2()
并且第一个函数返回false,那么整个表达式将总是计算为false,然而第二个函数返回的是什么。因此,永远不会调用第二个函数。如果第一个函数返回true,则会调用第二个函数,因为它实际上会影响表达式的计算。
因此,如果checkName()
返回false,则不调用其他函数。如果返回true,则将调用checkEmail()
。如果它也返回true,那么也将调用checkMessages()
。但是,如果任何函数返回false,则由于短路而不会评估其余函数。
答案 6 :(得分:0)
我和其他人有点不同。创建了一个数组,添加了我的验证方法的所有结果,并比较了每个值(AND);
function ValidateInputs() {
var arrValidations = new Array();
arrValidations.push(ValidateProponentDocument());
arrValidations.push(ValidateProponentName());
arrValidations.push(ValidateProponentBirthdate());
var ret = true;
$.each(arrValidations, function (index, item) {
ret &= item;
});
return ret;
}