统一加上validate验证,可以包括暂存和真实存储.
/** * 重置所有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"); */ function setRulesByAttr(){ //传入的第一个元素为表单 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; } if(arguments == null || arguments.length <= 0) continue; // 判断对象的ignoreRules var irs = je.attr("ignoreRules"); if(irs != null && $.trim(irs) == "true") continue; // 遍历所有属性 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{ var jr = eval("(" + asv + ")"); if(hasDate){ // 如果有日历控件 那么强制加上时间验证 jr.dateISO = true; } // 增加验证规则 je.rules("add", jr); }catch(ex){ // 转换出错 alert("无法将“" + asv + "”转换成合法的json"); } } } } }
这样就避免了大量的js验证代码存在于每个不同的页面中!
:)