JavaScript表单验证开发(2)

add: function(arr){ !this.cache && (this.cache = []); var isTwo = $.isArray(arr[0]); if( isTwo ){ this.cache = this.cache.concat(arr); }else{ this.cache.push(arr); }; return this; }

cache用来保存值
isTwo用来判断是否是2次数组,2次数组传多个值

get方法

var This = this; var args = arguments; if( args.length === 0 ){ //检测所有, 返回数组结果 var tmp = []; $.each(This.cache, function(i, val) { var newArr = [].concat(val); newArr.splice(1,1); tmp.push( newArr ); }); return merges(tmp,10); }

如果没有值,则获取所有结果,所有执行都是在merges函数里面执行,merges第一个参数为检测元素,结构为2次数组,[ [obj,a,b], [obj] ],因为有特殊检测带有参数,所有里面一次数组实际上为检测元素和要用的参数值,第二个参数为特殊参数,后文用来做判断是否是全部检测,用splice截取第二个参数,第二个参数为检测方法,后面用不到,截取后的数组为 【dom,参数】

}else{ if( $.isArray(args[0]) ){ //[obj,obj,obj] var tmp = []; // 1.一个检测,带参数2,3 [obj,2,3] // 2、一个检测,和另外一个是否相等 [obj,obj,'same'] // 3、多个检测,返回多个结果. [obj,obj],又可能出现上面2种情况 if( !isNaN(args[0][1]) || !isNaN(args[0][2]) ){ tmp.push(args[0]); return merges(tmp, 1); }; if( args[0][2] == 'same' ){ args[0].splice(2,1); tmp.push(args[0]); return merges(tmp, 1); }; $.each(args[0], function(i, val) { if( $.isArray(val) ){ tmp.push(val); }else{ tmp.push([val]); }; }); return merges(tmp); }else{ //常规 return merges([[args[0]]], 1); } };

$.isArray(args[0]) 用来判断是否是数组,不是数组则为dom对象,执行merges([[args[0]]], 1),第一个参数设置为2次数组,原因上文有提到,后面的1为后面结果做判断,1直接返回json结果
为真的时候,里面又有三种情况,和备注的相对应

function merges(arr, one){ //arr = [ [obj,a,b], [obj] ] var result = [];<span> </span>//返回结果 $.each(arr, function(i, val){ var oldName = val[0][0];<span> </span>//val为1次数组,得到源生dom对象 var tName;<span> </span>//执行方法名字 $.each(This.cache, function(i2,val2) { if( oldName == val2[0][0] ){<span> </span>//如果传入dom和cache已保存的dom一样,则获取dom执行方法 tName = val2[1]; return false; }; }); var r; if( one == 10){<span> </span>//全部获取,对特殊检测做特殊处理 if( tName == "testLength" || tName == "testSame" ){ r = { tName: "请单独获取" }; }else{ r = This[tName].apply(This, val); }; }else{<span> </span>//获取单个检测结果 r = This[tName].apply(This, val); }; if( one==1 ){<span> </span>//如果为1,则只单个检测,结果为[{}],然后跳出 result.push(r); return false; }; r.obj = val[0];<span> </span>//没有执行1的判断,说明是多个元素检测,手动增加一个obj属性,方便返回值查询,结果为[{},{}...] result.push( r ); }); return one==1 ? result[0] : result;<span> </span>//针对传入参数返回不同结果 };

如果大家还想深入学习,可以点击两个精彩的专题:jquery表单验证大全 JavaScript表单验证大全

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

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