博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET MVC异步验证是如何工作的03,jquery.validate.unobtrusive.js是如何工作的
阅读量:4880 次
发布时间:2019-06-11

本文共 3311 字,大约阅读时间需要 11 分钟。

在上一篇""中了解了ASP.NET异步验证是如何创建表单元素的,本篇体验jquery.validate.unobtrusive.js异步验证的全过程。

 

jquery.validate.unobtrusive.js文件的尾部看到了如下的一个调用:

 
$(function () {
$jQval.unobtrusive.parse(document);
});

 

可见,通过把当前页的document对象传给$jQval.unobtrusive.parse方法,使该页的表单元素能被异步验证。parse方法的主要作用是对所有的表单进行异步验证。

 
{
parse: function (selector) {
 
$(selector).find(":input[data-val=true]").each(function () {
$jQval.unobtrusive.parseElement(this, true);
});
 
var $forms = $(selector)
.parents("form")
.andSelf()
.add($(selector).find("form"))
.filter("form");
 
$forms.each(function () {
var info = validationInfo(this);
if (info) {
info.attachValidation();
}
});
}
}

以上,首先遍历data-val=true的input元素,调用$jQval.unobtrusive.parseElement方法,把存在于html元素中的、有关异步验证的信息抓取出来封装成jquery.validate.unobtrusive.js能识别的元数据。$jQval.unobtrusive.parseElement方法的第一个参数表示被验证的表单元素。第二个参数为true时,表示跳过对表单元素的验证,如果只验证一个元素就设置成true,如果验证多个元素就设置成false,默认为false。

 

validationInfo这个对象中,包含了异步验证所需要的一切信息,当调用attachValidation方法的时候,就会把封装在validationInfo对象中的所有验证规则传给validate方法。

 

有关validationInfo的细节:

 
data_validation = "unobtrusiveValidation";
 
function validationInfo(form) {
var $form = $(form),
result = $form.data(data_validation),
onResetProxy = $.proxy(onReset, form);
 
if (!result) {
result = {
options: {  // options structure passed to jQuery Validate's validate() method
errorClass: "input-validation-error",
errorElement: "span",
errorPlacement: $.proxy(onError, form),
invalidHandler: $.proxy(onErrors, form),
messages: {},
rules: {},
success: $.proxy(onSuccess, form)
},
attachValidation: function () {
$form
.unbind("reset." + data_validation, onResetProxy)
.bind("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;
}

以上,在validationInfo的构造函数中,通过$form.data方法,可以获取或设置unobtrusiveValidation的值。在unobtrusiveValidation这个对象中,包含了异步验证所需要的信息:

1、名为options的json对象,包含了验证规则、错误信息等。

2、attachValidation方法用来给form绑定自定义事件,每次调用或解除reset.unobtrusiveValidation方法都会调用onReset方法。

 

 
function onReset(event) {  // 'this' is the form element
var $form = $(this);
 
$form.data("validator").resetForm();
$form.find(".control-group").removeClass("error");
$form.find(".validation-summary-errors")
.addClass("validation-summary-valid")
.removeClass("validation-summary-errors");
$form.find(".field-validation-error")
.addClass("field-validation-valid")
.removeClass("field-validation-error")
.removeData("unobtrusiveContainer")
.find(">*")  // If we were using valmsg-replace, get the underlying error
.removeData("unobtrusiveContainer");
}

3、validate表示可以自定义验证事件。

 

而在把validationInfo对象中的所有验证规则传给validate方法的时候,真正起作用的是$.validator.unobtrusive.adapters,这样html中以data-*开头的才能被validate方法读懂。如果需要自定义异步验证规则,需要通过jQuery.validator.unobtrusive.adapters.add(adapterName, [params], function(element, form, message, params, rules,messages){})方法来实现。

 

其中,adapterNamedata-val-ruleName中的ruleName匹配。通过adapter可以扩展如下:

 
jQuery.validator.unobtrusive.adapters.addBool(adapterName, [ruleName]);
jQuery.validator.unobtrusive.adapters.addSingleVal(adapterName, attribute, [ruleName]);
jQuery.validator.unobtrusive.adapters.addMinMax(adapterName, minRuleName, maxRuleName, minMaxRuleName, [minAttribute, [maxAttribute]]);

转载于:https://www.cnblogs.com/darrenji/p/4107004.html

你可能感兴趣的文章
Excel导数据到数据库
查看>>
zz 悲催的程序员,以及程序员的悲催
查看>>
ExtJS基础篇
查看>>
UVA 11636
查看>>
字符串专题一:KMP算法
查看>>
yum安装mongodb
查看>>
项目:JavaWeb聊天室(问题汇总)
查看>>
hdu 4627 The Unsolvable Problem(暴力的搜索)
查看>>
链表各类操作详解
查看>>
Docker镜像相关
查看>>
Linux系统最小化安装之后的系统基础环境安装以及内核优化脚本
查看>>
Thinkphp 3.2笔记
查看>>
Apache 目录权限
查看>>
使用poi读取excel数据示例
查看>>
datatables ajax异步分页
查看>>
【网络收集】MySql中IS NOT NULL与!=NULL的区别
查看>>
学习笔记-人脸识别第三讲
查看>>
RHEL7开机不能正常进入系统(图形化界面)
查看>>
Android开发环境搭建完全图解
查看>>
详解BOM头以及去掉BOM头的方法
查看>>