我创建了一个自定义方法,可以根据两种情况远程检查返回不同消息的电子邮件的有效性。我只在第一次验证开始时工作,如果我再次更改输入值,结果仍然相同,就像该方法被忽略一样。
这是我的代码
var validateEmailMessage = '';
jQuery.validator.addMethod("checkmail", function(value, element) {
$.ajax({
type: 'POST',
url: '/join/check-email/',
data: {email : value},
success: function(data){
var data = JSON.parse(data);
if(data['response'] == 'ok'){
return true;
}else{
if(data['response'] == 'already'){
validateEmailMessage = 'This email has already been used';
}
if(data['response'] == 'notvalid'){
validateEmailMessage = 'This email is not valid';
}
return false;
}
}
});
}, function() { return validateEmailMessage });
$("#frm_join").validate({
rules: {
first_name: {
required: true,
},
last_name: {
required: true,
},
email: {
checkmail: true,
required: true,
email: true
},
pass:{
required: true,
alphaNumeric: true,
minlength: {
param: 8
}
},
pass_confirm: {
required: true,
minlength: {
param: 8
},
equalTo: {
param: "#pass"
}
}
},
messages: {
...
},
submitHandler: function(form) {
...
}
});
PHP 部分返回一个 json 响应,如 {"response": "ok"}
检查控制台,该方法被调用并每次返回正确的 true 或 false 响应,但输入与下面的错误消息保持相同或有效(取决于我第一次尝试的内容)
我解决了完全改变方法,使用默认的远程选项,如下所示:
remote: {
type: 'POST',
url: '/join/check-email/',
dataType: 'json',
data: {
email: function () { return $('#email').val(); }
},
dataFilter: function(data) {
var json = JSON.parse(data);
if(json.response != 'ok') {
return "\"" + json.response + "\"";
} else {
return true;
}
}
}