如何将这两个功能结合起来以便它们都能正常工作?现在,我只能得到一个验证,而不是另一个。
JAVASCRIPT的样本:
function validateForm() {
var x=document.forms["giftCert"]["gift_name"].value;
if (x==null || x=="") {
errMsg = "The recpient's name is required.";
$("div#emptyName").show();
$("div#emptyName").html(errMsg);
return false;
}
}
function validateForm() {
var x=document.forms["giftCert"]["gift_email"].value;
if (x==null || x=="") {
errMsg2 = "The recpient's email address is required.";
$("div#emptyEmail").show();
$("div#emptyEmail").html(errMsg2);
return false;
}
}
表单HTML的简短版本:
<form action="http://ww6.aitsafe.com/cf/voucher.cfm" method="post" name="giftCert" onsubmit="return validateForm()" />
*Name:<input type="text" name="gift_name">
<div id="emptyName" class="error"></div>
*Email: <input type="text" name="gift_email">
<div id="emptyEmail" class="error"></div>
<input class="button" type="submit" value="Add to Cart" />
</form>
答案 0 :(得分:1)
您可以将代码放在同一个函数中。
function validateForm() {
return ["Name", "Email"].every(function(type) {
var lower_type = type.toLowerCase(),
x=document.forms["giftCert"]["gift_" + lower_type].value;
if (x==null || x=="")
$("div#empty" + type).show().html("The recpient's " + lower_type + " is required.");
else
return true;
});
}
由于大部分代码几乎相同,因此您可以将"Name"
和"Email"
值放在一个数组中,然后循环数组,调用相同的代码,在需要的地方放入适当的值。
这使用Array.prototype.every
来指示数组中的每个值是否都通过了验证。
如果任一项目未通过验证,则返回undefined
,循环停止,validateForm
返回false
。
每个通过验证的项目都会返回true
。如果所有项目都通过了验证,.every
将返回true
,表单将继续。
如果要确保运行所有验证,可以使用.filter()
,并在失败时返回true
,以便将项目添加到生成的数组中。如果没有失败,则Array将为空。
然后测试数组的.length
,并将比较结果返回0
。
function validateForm() {
return ["Name", "Email"].filter(function(type) {
var lower_type = type.toLowerCase(),
x=document.forms["giftCert"]["gift_" + lower_type].value;
if (x==null || x=="") {
$("div#empty" + type).show().html("The recpient's " + lower_type + " is required.");
return true;
}
}).length === 0; // will be true if no validation failures
}
答案 1 :(得分:0)
完成后让它调用第二个。
或者有第三个函数调用它们并在你的onsubmit中有。该函数将看到两个函数的返回值,并且仅当它们都返回true时才返回true。
或者只是将第二个的代码放在第一个代码中,因为它无论如何都是相似的。你也可以摆脱一些重复的代码。
答案 2 :(得分:0)
当您重复使用相同的函数名时,每个后续函数声明都将覆盖任何前面的条目。将验证保存在单独的函数中可能是最简单的,因此您应该适当地命名它们并创建一个驱动函数来调用它们。例如:
function validateForm() {
return validateName && validateEmail();
}
function validateName() {
var x=document.forms["giftCert"]["gift_name"].value;
if (x==null || x=="") {
errMsg = "The recpient's name is required.";
$("div#emptyName").show();
$("div#emptyName").html(errMsg);
return false;
}
return true;
}
function validateEmail() {
var x=document.forms["giftCert"]["gift_email"].value;
if (x==null || x=="") {
errMsg2 = "The recpient's email address is required.";
$("div#emptyEmail").show();
$("div#emptyEmail").html(errMsg2);
return false;
}
return true;
}
此外,您可以将两者结合起来,但这并不是那么灵活:
function validateForm() {
var name =document.forms["giftCert"]["gift_name"].value;
if (name == null || name == "") {
errMsg = "The recpient's name is required.";
$("div#emptyName").show();
$("div#emptyName").html(errMsg);
return false;
}
var email = document.forms["giftCert"]["gift_email"].value;
if (email == null || email == "") {
errMsg2 = "The recpient's email address is required.";
$("div#emptyEmail").show();
$("div#emptyEmail").html(errMsg2);
return false;
}
return true;
}
答案 3 :(得分:0)
简短的回答就是这样做
function validateForm() {
var x=document.forms["giftCert"]["gift_name"].value;
if (x==null || x=="") {
errMsg = "The recpient's name is required.";
$("div#emptyName").show();
$("div#emptyName").html(errMsg);
return false;
}
x=document.forms["giftCert"]["gift_email"].value;
if (x==null || x=="") {
errMsg2 = "The recpient's email address is required.";
$("div#emptyEmail").show();
$("div#emptyEmail").html(errMsg2);
return false;
}
}
答案越长,您的功能必须具有唯一的名称。另外,在代码的一部分中使用jquery为什么不使用它来访问表单?此外,从HTML中调用函数通常被认为是不好的做法。
答案 4 :(得分:0)
一种可能的解决方案:
function validateForm() {
var x=document.forms["giftCert"]["gift_name"].value,
y = document.forms["giftCert"]["gift_email"].value,
error = false;
if ( !x ) {
errMsg = "The recpient's name is required.";
$("div#emptyName").html(errMsg).show();
error = true;
}
if ( !y ) {
errMsg2 = "The recpient's email address is required.";
$("div#emptyEmail").html(errMsg2).show();
error = true;
}
if (error === true) return false;
}
答案 5 :(得分:0)
对于想知道如何将两个函数合二为一的人来说,这是我为此创建的函数:
function combineFunctions() {
var args = Array.prototype.slice.call(arguments, 0);
return function() {
for (var i = 0, len = args.length; i < len; i++) {
if (typeof args[i] === "function") {
args[i].apply(this, arguments);
}
}
};
}
然后结合功能:
var myFunc = function() { console.log('1'); };
var myOtherFunc = function() { console.log('2'); };
var myCombinedFunc = combineFunctions(myFunc, myOtherFunc);
myCombinedFunc(); // outputs 1, then 2 to the console
注意:这仅适用于具有相同参数的函数 - 非常适合将函数添加到事件处理程序