如果我们在页面上调用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');
我在我的测试结束。它正在工作。如果有的话,请给出你的改进建议。 – 2010-09-28 04:11:35