基于jQuery.validate及Bootstrap的tooltip开发气泡样式的(3)

tooltipDuration: 配置气泡显示的时间。我提供的实现,在显示气泡时的逻辑是:在校验失败的时候,显示tootip,然后在这个选项指定的时间过去之后,自动消失,当鼠标再次移入失败元素的时候,tooltip会再次显示,鼠标移出的时候再消失。

fieldConfig:可以用来根据字段名称做一些配置,注释中有配举例。可配置的选项说明如下:

- fvTipTarget:用来自定义气泡显示在哪个元素上; - tipPlacement:配置某个元素气泡提示的显示位置 - tooltipClass:自定义气泡组件的css类 - errorPlacement:自定义某个元素的失败信息的插入位置 - fvRelatedTarget:自定义元素校验时需要关联影响的其它元素,其实就是在表单元素校验失败的时候也把相关的validClass和errorClass这两个css类,同步管理到其它元素而已。

需要注意的是,fieldConfig是根据字段元素名称来配置的,因为只能根据名称来找到相应的元素,所以表单元素上面一定要有name属性,这样才能找到fieldConfig中的配置项。

fieldTypeConfig:可以用来按字段类型做一些配置,它的配置项跟fieldConfig的一致,只不过它的好处在于,可以为同一个类型的字段指定相同的配置,省的在fieldConfig里面要重复配置。

需要注意的是:fieldType是通过在表单元素上的type属性或者data-type属性或者data-fv-type属性来指定的,优先级:data-fv-type > data-type > type。在fieldTypeConfig中,可以使用all这个特殊的type,它不需要在表单元素上指定,用来对所有的字段进行一个统一的配置。在validate.js模块的静态成员上,提供了defaultFieldTypeConfig对象,通过扩展这个对象,可以提供默认的一些按字段类型的配置,方便做一些统一处理。最后一点在静态成员部分还会再详细介绍。

jquery.validate相关的一些需要覆盖的option及其说明如下:

debug: true,//防止校验成功后表单自动提交 submitHandler: $.noop,//屏蔽表单校验成功后的表单提交功能,由外部的Form组件负责提交 ignore: '[type="hidden"]:not(.fv-yes),[disabled]:not(.fv-yes),.fv-no',//用于过滤不参与校验的元素 errorElement: 'i',//使用<i>元素来包裹校验失败的信息 errorClass: 'fv-error',//校验失败时相应的class validClass: 'fv-valid'//校验成功时相应的class

需要补充的是:

a. 为啥要防止表单自动提交,因为我自己更偏向于主动控制表单提交;

b. ignore部分,没有完全把隐藏的或者禁用的表单元素排除掉,有一些时候隐藏元素也是能够用于校验的。

3)核心实现

核心实现的方法就是下面的代码:

$element.validate($.extend(opts, { errorPlacement: function (error, element) { if (opts.useTooltip) { return; } //jquery.validate组件默认的校验失败信息的插入方式是:在该元素后面插入校验失败的信息 //我们可以按字段及字段类型通过fieldConfig与fieldTypeConfig来自定义插入的方式 var _errorPlacement = getCommonConfig('errorPlacement', element, opts); if (!isFunc(_errorPlacement)) { _errorPlacement = function () { error.insertAfter(element); } } _errorPlacement(error, element); }, showErrors: function (errorMap, errorList) { //覆盖这个方法以便在校验失败的时候显示tooltip //不启用tooltip的时候按默认的方式显示失败信息 var successList = this.successList; //处理本次校验失败的字段 if ($.isArray(errorList)) { errorList.forEach(function (item) { setRelatedTargetStyle(item.element, opts, true); if (opts.useTooltip) { //显示失败的tooltip showErrorItem(item, opts, that); } }); } if ($.isArray(successList)) { successList.forEach(function (element) { setRelatedTargetStyle(element, opts, false); if (opts.useTooltip) { //移除原先可能失败导致的tooltip showSuccessItem(element, opts, that); } }); } //官方文档要求,在自定义showErrors之后,通过调用下面的方法完全内置的其它处理 this.defaultShowErrors(); } }));

这两个代码应该很好理解,因为各个部分的逻辑都已经单独抽出来封装了,细节可以逐一去阅读了解:

基于jQuery.validate及Bootstrap的tooltip开发气泡样式的

以上每个方法都比较简单,所以就不拆开来介绍了。

4)继承jquery.validate提供的其它api方法

由于在实际的工作中,表单校验的逻辑有的时候会很复杂,尤其涉及到字段有增删改,校验规则有增删改的时候,所以去看jquery.valiate的文档,也能发现它提供了不止validate这个api,还有很多其它有用的方法,为了方便,所以直接把jquery.validate提供的其它validate.js不具备的方法都继承过来:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzsyjx.html