如果我们在页面上调用prototype.js,multiemail验证方法不起作用。

问题描述:

我已经创建了一个添加电子邮件方法(jquery)来验证收件人文本框中的多个电子邮件。当prototype.js没有在页面上声明时它工作正常。为了摆脱$冲突,我还加入了$ noconflict()方法度量度量。除了收件人电子邮件验证字段之外,其他字段验证在这种情况下正在工作。 AS根据我的发现“jQuery.validator.methods.email.call(this,value,element)”页面的第50行不起作用,因此该方法未触发。我也需要调用prototype.js。请参阅以下代码以获得更清楚的理解.......提前致谢。如果我们在页面上调用prototype.js,multiemail验证方法不起作用。

请参考下面的代码: 多电子邮件验证
变种JQ = jQuery.noConflict();
JQ(文件)。就绪(函数(){

// Handler for .ready() called. 
JQ("#email-form").validate({ 
      rules : { 
       email : { 
        required : true, 
            email : true 
       }, 
          recipientEmail : { 
        multiemail: true, 
            required : true 
          //  email : true 
            } 
      }, 
        messages: { 
       email: { 
        required: "Please enter your email address.", 
            email: "Please enter a valid email address" 
       }, 
          recipientEmail: { 
            multiemail: "One or more of your recipient email addresses needs correction.", 
            required: "Please enter the recipient's email address." 
            //email: "Please enter a valid email address" 
       } 
      } 
     }); 
}); 

JQ.validator.addMethod( “multiemail”,函数(值,元素){ 如果(this.optional(元件))//返回(可选) 返回true; // var emails = value.split S *,\ S *”, “GI”));

 valid = true; 
       maxEmaillength = emails.length; 
     for(var i in emails) 
      { 
     value = emails[i]; 
     valid = valid && jQuery.validator.methods.email.call(this, value, element); 
        // Maximum email length validation 
         if(maxEmaillength > 5) 
           { 
             JQ('label.error:first').html("Please enter only 5 mail IDs at a time"); 
             JQ('label.error:first').css(display, block);        
             setTimeout(alert("Please enter only 5 mail IDs at a time"), 5); 
          }  
     } 
     return valid; 
        }, 'One or more email addresses are invalid'); 

</head> 
<body> 
<form action="" method="get" name="email-form" id="email-form"> 
<label for="email">email</label> 
<input type="text" name="email" id="email" style="width:200px" /> 
<br /> 
<label for="recipientEmail">Recipient Email</label> 
<input type="text" name="recipientEmail" id="recipientEmail" style="width:500px" /><br /> 

<input type="submit" name="Submit" id="Submit" value="Submit" /> 
</form> 
</body> 
</html> 

我只是改变了方法一点点,因为jQuery.validator.methods.email.call(这一点,值,元素)并没有在先前的自定义方法的工作。虽然我找不到确切的原因,但为什么不能用prototype.js和那个问题的确切解决方案。但是下面的代码片段正在按照需要工作。只需将以前的jquery自定义电子邮件方法替换为下面的方法即可。

function validateEmail(field) { 
    var regex=/\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b/i; 
    return (regex.test(field)) ? true : false; 
} 

JQ.validator.addMethod("multiemail", function(value, element) 
{ 
    var result = value.split(","); 
    for(var i = 0;i < result.length;i++) 
    if(!validateEmail(result[i]) || result.length > 5) 
    return false;    
    return true;              

},'One or more email addresses are invalid'); 
+0

我在我的测试结束。它正在工作。如果有的话,请给出你的改进建议。 – 2010-09-28 04:11:35