结合两个javascript函数?

时间:2012-09-12 00:54:20

标签: javascript forms validation function

如何将这两个功能结合起来以便它们都能正常工作?现在,我只能得到一个验证,而不是另一个。

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>

6 个答案:

答案 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

注意:这仅适用于具有相同参数的函数 - 非常适合将函数添加到事件处理程序