我知道有些帖子几乎和我看过的很多帖子一样,很遗憾没有找到解决方案。我的问题是我使用jquery的.addmethod()函数向jquery验证插件编写了一个电子邮件valiadtor。
$.validator.addMethod("uniqueEmail", function(value, element) {
$.ajax({
data: 'email=' + value,
type: 'get',
url: 'functions/emailcheck.php',
dataType:"html",
success: function(msg) {
alert("M:"+msg+" V:"+value);
if(msg == true || msg != null || msg == "true"){
return true;
alert("TRUE!!!");
}
else{
return false;
}
}
});
});
然后在验证规则中......
email: { required: true, email: true, uniqueEmail: true },
然后最后甚至在使用这个php文件....
<?php
echo "true";
?>
它给我警告已经注册,并在电子邮件下发送消息.. uniqueEmail: jQuery.format("{0} has already been registered")
。现在我在ajax调用中设置了调试警报。它显示它返回true,并且值是输入的。
我希望得到一些帮助,这让我感到疯狂,我觉得这对你们中的一些人来说很明显!
PS 继承了我的完整验证减去上面的额外方法...
$( ".form_registration_submit" ).click(function() {
$(".qtip").remove();
$("#form_registration").validate({
onfocusout: function(element){
$(".qtip").remove();
},
rules: {
name: {
required: true,
minlength: 3
},
firstname: {
required: true,
minlength: 3
},
lastname: {
required: true,
minlength: 3
},
username: {
required: true,
minlength: 3
},
password: {
required: true,
minlength: 5
},
confirm_password: {
required: true,
minlength: 5,
equalTo: "#form_registration_password"
},
email: {
required: true,
email: true,
uniqueEmail: true
},
topic: {
required: "#newsletter:checked",
minlength: 2
},
agree: "required"
},
messages: {
name: "Please enter your name",
firstname: "Please enter your firstname",
lastname: "Please enter your lastname",
username: {
required: "Please enter a username",
minlength: "Your username must consist of at least 2 characters"
},
password: {
required: "Please provide a password",
minlength: "Your password must be at least 5 characters long"
},
confirm_password: {
required: "Please confirm your password",
minlength: "Your password must be at least 5 characters long",
equalTo: "Please enter the same password as above"
},
email: {
required: "Please enter a valid email address",
uniqueEmail: jQuery.format("{0} has already been registered")
},
agree: "Please accept our policy"
},
errorPlacement: function(error, element) {
element.qtip(
{
show: { solo: false, ready: true, delay: 0 },
hide: { when:false },
content: eval(error),
style: { name: 'dark', border: { width: 1, radius: 1, color:"red" }, tip: 'bottomLeft' },
position: {
corner: { target: 'topRight', tooltip: 'bottomLeft' },
adjust: { x: 0 , y: 0 }
}
});
},
submitHandler: function(form) {
$(".qtip").remove();
jQuery(form).ajaxSubmit({
target: "#login_result"
});
}
});
});
答案 0 :(得分:3)
您的验证函数实际上并未返回任何值,因此评估为false。默认情况下,.ajax()
请求是异步的,这意味着验证函数在有可能执行成功回调之前结束。
此问题与.post inside jQuery.validator.addMethod always returns false
重复答案 1 :(得分:1)
也许您的验证码是在点击功能(或其他事件)中,所以它被多次调用? 你应该把它放在$(文件).ready()里面。 此外,您应该发送数据:
...
data: {'email': value},
...
所以它将被urlencoded。如果您不这样做,“a@a.c&om
”等电子邮件将有效
答案 2 :(得分:0)
只需为你的ajax调用添加async:false参数,你就可以了