原因是remote采用的是异步提交,也就是不管最后的结果是true 还是false,都有一定的响应延迟,但是程序程序早已经往下执行了。
直接重写插件的remote
方法,让它发送请求变成同步的即可,主要是添加选项async: false
$.validator.methods.remote = function (value, element, param, method) {
// console.log(value,element,param,method);
if (this.optional(element)) {
return "dependency-mismatch";
}
method = typeof method === "string" && method || "remote";
var previous = this.previousValue(element, method),
validator, data, optionDataString;
if (!this.settings.messages[element.name]) {
this.settings.messages[element.name] = {};
}
previous.originalMessage = previous.originalMessage || this.settings.messages[element.name][method];
this.settings.messages[element.name][method] = previous.message;
param = typeof param === "string" && {url: param} || param;
optiOnDataString= $.param($.extend({data: value}, param.data));
if (previous.old === optionDataString) {
return previous.valid;
}
previous.old = optionDataString;
validator = this;
this.startRequest(element);
data = {};
data[element.name] = value;
$.ajax($.extend(true, {
mode: "abort",
port: "validate" + element.name,
dataType: "json",
data: data,
async: false,
context: validator.currentForm,
success: function (response) {
var valid = respOnse=== true || respOnse=== "true",
errors, message, submitted;
validator.settings.messages[element.name][method] = previous.originalMessage;
if (valid) {
submitted = validator.formSubmitted;
validator.resetInternals();
validator.toHide = validator.errorsFor(element);
validator.formSubmitted = submitted;
validator.successList.push(element);
validator.invalid[element.name] = false;
validator.showErrors();
} else {
errors = {};
message = response || validator.defaultMessage(element, {
method: method,
parameters: value
});
errors[element.name] = previous.message = message;
validator.invalid[element.name] = true;
validator.showErrors(errors);
}
previous.valid = valid;
validator.stopRequest(element, valid);
}
}, param));
return "pending";
}
这个方式没弄出来
原文链接:https://www.cnblogs.com/lujiahao/p/15549073.html