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();
}
}));
这两个代码应该很好理解,因为各个部分的逻辑都已经单独抽出来封装了,细节可以逐一去阅读了解:

以上每个方法都比较简单,所以就不拆开来介绍了。
4)继承jquery.validate提供的其它api方法
由于在实际的工作中,表单校验的逻辑有的时候会很复杂,尤其涉及到字段有增删改,校验规则有增删改的时候,所以去看jquery.valiate的文档,也能发现它提供了不止validate这个api,还有很多其它有用的方法,为了方便,所以直接把jquery.validate提供的其它validate.js不具备的方法都继承过来:
//将jquery.validate的api方法代理到自身
for (var i in this._validator) {
if (!(i in this) && isFunc(this._validator[i])) {
this[i] = (function (context, func) {
return function () {
return func.apply(context, arguments);
}
})(this._validator, this._validator[i]);
}
}5)表单校验重置
一个很普遍的需求,就是有的时候需要重置表单,这个时候除了重置表单元素的值,还得重置它们的校验状态,虽然jquery.validate有提供相关方法,但是由于我们有用到tooltip组件以及添加了一些其它处理,所以需要对表单校验的重置功能,做一些自定义,主要是tooltip组件的销毁和一些状态的还原:
resetForm: function () {
var $element = this.$element,
opts = this.options;
//清除掉tooltip组件及绑定的事件
if (opts.useTooltip) {
$element.find('.fv-tip-target').each(function () {










