统一加上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验证代码存在于每个不同的页面中!
:)