jquery validate的使用技巧

统一加上validate验证,可以包括暂存和真实存储,数据暂存的时候,可以调用setRulesByAttr("form","saveValid")方法验证数据合法性后,提交数据至缓存空间,如memcached.

/**
    * 重置所有input select之类表单项的验证规则
    * 接受若干个参数 参数对应相关表单项的自定义属性名,属性值是可以转换为rule的json字串
    * 例如:<input saveValid="{required:true}" validateValid="{required:true,number:true}" " type="text" value="" />
    * 在调用时至少要有一个参数 是form的ID
    * 另外 如果标签的自定义属性ignoreRules是"true"字串 那么这个标签将不会被验证
    *例子:<input name="zinv.alimony" saveValid="{number:true}" validateValid="{number:true,required:true}" value="${fn:escapeXml(zinv.alimony)}" type="text" size="10" />元/月
    *调用方式: setRulesByAttr("form","saveValid")或setRulesByAttr("form","validateValid");
    */
    function setRulesByAttr(formId){
        //传入的第一个元素为表单
        var frm = $("#" + arguments[0]);
        var e = frm.find("input, select, textarea");
        // 遍历每个元素
        for(var i = 0; i < e.length; i++){
            var je = $(e[i]);
            // 是否有时间控件
        	var onf = je.attr("onfocus");
        	var hasDate = false;
        	if(onf != null && onf.toString().indexOf("WdatePicker") >= 0)
        		hasDate = true;
            
            // 清空验证规则
            try{
                je.rules("remove");
            }catch(exx){
            //document.ready里必须加上$('#formId...').validate()
                alert("移除对象验证规则错,是否缺少$('#formId...').validate()方法\n" + exx.name + "\n" + exx.message);
                continue;
            }
            //如果只传递了一个formId,那么意思就是说取消所有validate验证规则
            if(arguments.length <= 1)
                continue;

            // 判断对象的ignoreRules,true的话,忽略validate验证规则
            var irs = je.attr("ignoreRules");
            if(irs != null && $.trim(irs) == "true")
                continue;

            // 遍历所有属性,如'saveValid'属性,            
            for(var j=1; j<arguments.length; j++){
                // rule的属性名
                var a = $.trim(arguments[j]);
                // 取出属性值
                var asv = je.attr(a);
                if(asv != null && $.trim(asv).length > 0){
                    // 将属性值转为rule json
                    try{
                       //将json串转换为json对象.
                       var jr = eval("(" + asv + ")");
                       if(hasDate){
                       		// 如果有日历控件 那么强制加上时间验证
                       	jr.dateISO = true;
                       }
                       // 增加验证规则,这种增加方式出于validate框架支持
                       je.rules("add", jr);
                    }catch(ex){
                       // 转换出错
                       alert("无法将“" + asv + "”转换成合法的json");
                    }
                }
            }
        }
    }

这样就避免了大量的js验证代码存在于每个不同的页面中!

:)

相关推荐