在jquery.validate.unobtrusive中覆盖ErrorPlacement函数的正确方法是什么?
查看jquery.validate.unobtrusive.js脚本,看起来开发人员的意图是允许您通过设置$jQval.unobtrusive.options来应用自己的ErrorPlacement函数.
在定义errorPlacement函数的validationInfo(form)函数中,我们看到对execInContext(“errorPlacement”,arguments)的调用.
看来如果我们在$.validator.unobtrusive.options下创建一个errorPlacement函数,那么就会调用它.
$.validator.unobtrusive.options = {
errorPlacement: function () {
console.log("hello");
}
};
问题是必须在jquery.validate.js之后和引用jquery.validate.unobtrusive.js之前配置它.否则$jQval.unobtrusive.options为null,并且不会再次设置$form.data(data_validation,result).
function validationInfo(form) {
var $form = $(form),result = $form.data(data_validation),onResetProxy = $.proxy(onReset,form),defaultOptions = $jQval.unobtrusive.options || {},execInContext = function (name,args) {
var func = defaultOptions[name];
func && $.isFunction(func) && func.apply(form,args);
}
if (!result) {
result = {
options: { // options structure passed to jQuery Validate's validate() method
errorClass: defaultOptions.errorClass || "input-validation-error",errorElement: defaultOptions.errorElement || "span",errorPlacement: function () {
onError.apply(form,arguments);
execInContext("errorPlacement",arguments);
},invalidHandler: function () {
onErrors.apply(form,arguments);
execInContext("invalidHandler",messages: {},rules: {},success: function () {
onSuccess.apply(form,arguments);
execInContext("success",arguments);
}
},attachValidation: function () {
$form
.off("reset." + data_validation,onResetProxy)
.on("reset." + data_validation,onResetProxy)
.validate(this.options);
},validate: function () { // a validation function that is called by unobtrusive Ajax
$form.validate();
return $form.valid();
}
};
$form.data(data_validation,result);
}
return result;
}
>设置$.validator.unobtrusive.options错误放置功能
>删除Unobtrusive验证
>重新应用不显眼的验证
$.validator.unobtrusive.options = {
errorPlacement: function () {
console.log("errorPlacement");
}
};
$("#form_selector").removeData("unobtrusiveValidation");
// reapply the form's validator
$.validator.unobtrusive.parse(document);
var validator = $("#form_selector").data('validator');
var originalFunction = validator.settings.errorPlacement;
validator.settings.errorPlacement = function(error,element) {
console.log("errorPlacement");
originalFunction(error,element);
};