我创建了一个自定义方法,可以根据两种情况远程检查返回不同消息的电子邮件的有效性。我只在第一次验证开始时工作,如果我再次更改输入值,结果仍然相同,就像该方法被忽略一样。
这是我的代码
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;
}
}
}