2012-04-27 176 views
15

我有以下的jQuery验证插件:jQuery的验证插件多个电子邮件地址

<script type="text/javascript" src="/requires/js/jquery.min.js"></script> 
<script type="text/javascript" src="/requires/js/jquery.validate.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#form").validate({ 
      rules: { 
       name: { 
        required: true, 
        minlength: 2 
       }, 
       email: { 
        required: true, 
        email: true 
       }, 
       emails: { 
        required: true, 
        email: true 
       } 
      }, 
      messages: { 
       name: { 
        required: "Je bent vergeten om je naam in te vullen.", 
        minlength: "Je bent vergeten om je naam in te vullen." 
       }, 
       email: { 
        required: "Je bent vergeten om je emailadres in te vullen.", 
        email: "Het opgegeven emailadres is niet geldig." 
       }, 
       emails: { 
        required: "Je bent vergeten om het emailadres van je vriend(in) in te vullen.", 
        email: "Je moet een geldig e-mailadres van je vriend(in) invullen." 
       } 
      } 
     }); 
    }); 
</script> 

<form id="form" method="post"> 
Jouw naam: <input type="text" name="name"><br /> 
Jouw e-mailadres: <input type="text" name="email"><br /> 
Het e-mailadres van je vriend(in): <input type="text" name="emails"><br /> 
<input type="submit" value="Verstuur"> 
</form> 

通过电子邮件价值的人一定可以给多个emailaddresses像[email protected]; [email protected]或测试@测试。 com,test @ test2.com

当你这样做时,验证插件会给出错误:Je moet een geldig e-mailadres van je vriend(in)invullen。

我该如何解决这个问题?

回答

42

下面是与addMethod的帮助下加入了定制功能:

jQuery.validator.addMethod(
    "multiemail", 
    function(value, element) { 
     if (this.optional(element)) // return true on optional element 
      return true; 
     var emails = value.split(/[;,]+/); // split element by , and ; 
     valid = true; 
     for (var i in emails) { 
      value = emails[i]; 
      valid = valid && 
        jQuery.validator.methods.email.call(this, $.trim(value), element); 
     } 
     return valid; 
    }, 

    jQuery.validator.messages.email 
); 

这里有一个的jsfiddle将告诉您如何使用multiemail自定义的方法:

http://jsfiddle.net/leniel/xFphm/7/

+0

谢谢,但我可以把它放到'$(“#form”)。validate({});'? – Arthur 2012-04-27 14:29:39

+1

将此JavaScript包括在您的页面上,然后在其中有emails: { required: true,email: true },将其更改为emails: { required: true,multiemail: true }。 – 2012-04-27 15:17:25

+0

感谢guy's !,但是当电子邮件字段为空时,我会看到例如:空字段,以及字段不正确时,此emailadres无效。现在我只看到一个错误,当字段不正确... – Arthur 2012-04-27 15:25:14

0

订制的功能里面有留言

<script>  
jQuery.validator.addMethod("custom_method_one", function (value, element) { 
    if (this.optional(element)) { 
    return true; 
    } 

    var emails = value.split(','), 
    valid = true; 

    for (var i = 0, limit = emails.length; i < limit; i++) { 
    value = emails[i]; 
    valid = valid && jQuery.validator.methods.email.call(this, value, element); 
    } 

    return valid; 
    }, "Invalid email format: please use a comma to separate multiple email addresses."); 

$('#form').validate({ 
"emails": { required:true,custom_method_one: true } 
}) 
</script> 

<form method="post" id="form" name="form" action=""> 
<input type="text" name="emails" id="emails" placeholder="(eg:[email protected],[email protected],....)"/> 

</form> 
相关问题