jquery验证器插件代码不能处理多个值

时间:2014-07-17 07:37:42

标签: jquery forms validation

我需要让垃圾邮件发送者无效进入" gmail"," hotmail"," yahoo"," rediff"地址。并且只允许商业电子邮件。我使用了流行的验证器插件:http://jqueryvalidation.org/

所以这里是检查单个值并且有效的代码:

  jQuery.validator.addMethod("biz", function(value, element) {
    var email = value;
    return !(email.indexOf("gmail") > -1);
  }, "Only business emails allowed");

这是html:

  <label>Email Address <em class="formee-req">*</em></label>
  <input class="email" id="email" placeholder="Enter Business Email Only" type="text" name="email">
  <span></span>

然后调用插件:

   $('.basic-form').validate(
   {

    rules: {
      email : {
        biz: true
      }
    }

以上代码有效。所以现在我尝试验证多个值,如下所示:

  jQuery.validator.addMethod("biz", function(value, element) {
    var invalid_email_domains = ["gmail", "hotmail", "yahoo", "rediff"];
    var email = value;
    $.each(invalid_email_domains, function (index, invalid_domain) {
       if(email.indexOf(invalid_domain) > -1) {
          return true;
       } else {
          return false;
       };
    });

  }, "Only business emails allowed");

它没有验证其他值,即我总是收到错误&#34; 只允许商业电子邮件&#34;无论我输入什么价值。我究竟做错了什么?我尝试翻转布尔值,但它只是继续返回相同的错误。

1 个答案:

答案 0 :(得分:0)

以下是有效的代码:

  jQuery.validator.addMethod("biz", function(value, element) {
    var invalid_email_domains = ["gmail", "hotmail", "yahoo", "rediff"],
    email = value,
    isValid = true;

    for (var i = 0; i < invalid_email_domains.length; i++) {
      if (email.indexOf(invalid_email_domains[i]) > -1) {
        // console.log("invalid biz address found");
        isValid = false;
        break;
      }
    };

    return isValid;

  }, "Only business emails allowed");

看起来我需要首先设置一个布尔值,然后在找到错误的值时突破循环。