我如何获得JQuery验证以在空白字段上触发远程规则?服务器将决定是否需要该字段,因此即使该字段为空,我也需要在调用valid
时触发远程规则-当前,如果该字段为空,则不会调用该规则。
创建了一个新的验证器方法,该方法不调用optional
函数,并且设置为以同步方式处理ajax调用。
$.validator.addMethod("synchronousRemote", function (value, element, param) {
var previous = this.previousValue(element);
if (!this.settings.messages[element.name]) {
this.settings.messages[element.name] = {};
}
previous.originalMessage = this.settings.messages[element.name].remote;
this.settings.messages[element.name].remote = previous.message;
param = typeof param === "string" && { url: param } || param;
if (previous.old === value) {
return previous.valid;
}
previous.old = value;
var validator = this;
this.startRequest(element);
var data = {};
data[element.name] = value;
var valid = "pending";
$.ajax($.extend(true, {
url: param,
async: false,
mode: "abort",
port: "validate" + element.name,
dataType: "json",
data: data,
success: function (response) {
validator.settings.messages[element.name].remote = previous.originalMessage;
valid = response === true || response === "true";
if (valid) {
var submitted = validator.formSubmitted;
validator.prepareElement(element);
validator.formSubmitted = submitted;
validator.successList.push(element);
delete validator.invalid[element.name];
validator.showErrors();
} else {
var errors = {};
var message = response || validator.defaultMessage(element, "remote");
errors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;
validator.invalid[element.name] = true;
validator.showErrors(errors);
}
previous.valid = valid;
validator.stopRequest(element, valid);
}
}, param));
return valid;
}, "Please fix this field.");
如果该字段为空,则没有要评估的数据。
换句话说,当输入为空时,没有触发任何验证规则(required
除外……这就是插件方法的编写方式。
但是,更改标准方法的操作方式的唯一方法是使用您自己的方法来替代它们。使用the .addMethod()
method编写一个新的.addMethod()
方法,使该字段必填。查看现有remote
方法的源代码,并在您的自定义方法中使用它。您需要删除所有利用remote
的部分,因为这会使它无法在空的输入字段上触发。
谢谢,这个答案让我很高兴!@Sparky,使用.addMethod的解决方案对我有用,但是如果发生验证错误,我的服务器端-脚本会以自定义错误消息答复。问题是,在功能“请修复此字段”中,不会显示此错误消息-仅显示标准消息。显示。我如何显示我的消息,它作为来自ajax调用的答案的字符串到达?
非常感谢advacne!