<div id="form1" class="container login-con" dx="hv-center" form-type="form" form-site-code="@ViewBag.code" form-result="login.methods.result"
form-action="/Home/UpdatePassword" form-source="login.methods.getData" form-send-data="login.methods.sendData">
<div class="row rw thead-light">
<div class="col-lg-12 text-center lg-title" form-key="sr_uid" form-data="sr_uid"></div>
<div form-key="id" form-data="id" style="display:none;"></div>
</div>
<div class="row rw">
<div class="col-lg-2 col-title">旧密码</div>
<div class="col-lg-10">
<input form-vali="notnull" form-err="notnull{旧密码不能为空}" form-data="pwd" form-type="focus" type="password" class="form-control" value="" />
</div>
</div>
<div class="row rw">
<div class="col-lg-2 col-title">新密码</div>
<div class="col-lg-10">
<input form-type="enter" form-data="sr_pwd" form-vali="notnull|s{5,10}" form-err="notnull{Password can not empty.}|s{Password length must be between 5 and 10 digits}" type="password" class="form-control" value="" />
</div>
</div>
<div class="row rw">
<div class="col-lg-2 col-title">确认</div>
<div class="col-lg-10">
<input form-type="enter" form-data="sr_pwd1" form-vali="notnull|s{5,10}" form-err="notnull{Password can not empty.}|s{Password length must be between 5 and 10 digits}" type="password" class="form-control" value="" />
</div>
</div>
<div class="row rw">
<div class="col-lg-6" form-type="msg" style="color:red;word-wrap:break-word;"></div>
<div class="col-lg-6">
<input form-type="cancel" type="button" class="btn btn-primary" style="float:left;" value="取消" />
<input form-type="submit" type="button" class="btn btn-primary" style="float:right;" value="确定" />
</div>
</div>
</div>
<script type="text/javascript">
var login = {
methods: {
getData: function (fm) {
var dt = { id: @userInfo.Id, sr_uid: '@userInfo.sr_uid', sr_pwd: '', sr_pwd1: '', pwd: '' };
fm.setData(dt);
},
sendData: function (form, data, siteCode) {
if (data.sr_pwd != data.sr_pwd1) {
alert("两次密码输入不一致");
return;
}
form.submit();
},
result: function (dt) {
if (!dt.success) {
alert(dt.message);
return;
}
//window.location = '/Home/Index?code=' + dt.code;
}
}
}
</script>
下面是 formTable.js 源码(依赖于 jQuery)
/*
属性:
注:必须配置 form-type="form", form-type="submit", form-data="字段名称"(至少要存在一个)
如果设置了 form-submit 配置, form-type="submit"可省略
其中自动提交表单 form-action 必须配置(如果配置了form-send-data,则form-action可省略)
form-site-code:如果目标站点非自身站点,该配置<必须>, 可从 ExtAjax.VisitCode 对象用获取
可写为: form-site-code="ExtAjax.VisitCode['basic']"
或 form-site-code="ExtAjax.VisitCode.basic"
其中basic是appsitting.json文件VisitCode节点下的key值
1> form-type: [*必须*]form[标识一个表单容器], [*必须*]submit[标识提交按钮], cancel[清空所有form-data项数据],
msg[提交表单后反馈信息显示的容器], enter[在input中当按回车时提交表单], focus[设置控件初始焦点]
2> form-action: 表单提交路径, 当form-send-data不存在时[*必须*]
3> form-source: 获取数据初始为表单, 对应函数体: function(formDOM){}, formDOM对象附带一个setData(data)方法
4> form-data: [*必须*]字段名称, 可表示为{{字段名}}
5> form-key: 主键标识, 必须和form-data一起使用
6> form-site-code: 表单数据提交到目标站点所对应的siteCode
注:如果目标站点非自身站点,该配置必须
7> form-submit: 初始为表单时, 此函数会接收到一个用于提交当前表单的方法(回调函数),可程序执行该方法动态提交表单
此方法名称对应函数体: function(submitObj) {}
其中 submitObj 对象具备一个 submit() 方法, 可异步执行该方法提交表单
7> form-vali: 数据验证
notnull\phone\email\idcode\n\n{1}\n{3,5}\n{5,}\n{,5}\s{1}\s{3,5}\s{5,}\s{,5}\[正则表达式]
例: form-vali="notnull|n{5,11}" 匹配不能为空 或 大于等于5且小于等于11的数字
form-vali="[[^0-9]+]" 匹配非数字且不为空的所有字符
值说明: notnull不能为空, phone手机号码11位, email邮件, idcode身份证号, n匹配数字, n{3,5}匹配数字长度必须大于等于3且小于等于5
n{5,}匹配数字长度必须大于等于5, n{,5}匹配数字长度必须小于等于5(可为空)
s表示任何字符, 后边匹配规则与数字相同
[正则表达式] 中括号里表示正则表达式匹配,但不能和其它匹配规则并用
注: 数据验证类型可以同时写入多项,多项用'|'分隔, 例: form-vali="notnull|idcode", 多项并用规则不包含自定义正则表达式
8> form-err: 验证类型{错误提示}, 如果是自定义正则表达式'[]{错误提示}',仅使用中括号
例: form-err="notnull{用户名不能为空!}"
form-err="[]{你输入的数据类型不正确}" //***** 自定义正则表达式不能与其它验证类型同时使用 ******
form-err="notnull{身份证号码不能为空!}|idcode{身份证号码输入不正确}"
form-err="notnull{电话号码不能为空!}|n{电话号码输入不正确}" //n 可对应数据验证的所有形式,例:n, n{2}, n{2,}, n{,4}, n{2,5}
//s 同上
注: 如果数据验证类型仅有一个, '验证类型{}'可省略不写, 例: form-err="用户名不能为空!"
9> form-data-option: 一个自定义方法名称, 获取每一项form-data后执行, 这个方法名称对应函数体:function (container, fieldName, fieldValue, isSubmit) { }
10> form-data-row: 一个自定义方法名称, 获取当前表单所有项form-data后执行 或 点击submit时执行(当返回为false时将终止提交数据),
这个方法名称对应函数体:function (container, dataRow, isSubmit) { }
11> form-result: 一个自定义方法名称, 获取提交表单完成后执行, 这个方法名称对应函数体:function (result) {}
12> form-cancel: 一个自定义方法名称, 点击取消按钮时执行, 这个方法名称对应函数体:function (form, data) {}
13> form-cancel-option: 一个自定义方法名称, 点击取消按钮时执行, 当返回false时则不清空该字段对应控件的值, 这个方法名称对应函数体:function (fieldname, fieldvalue) {}
14> form-send-data: 一个自定义方法名称, 点击提交按钮时执行, 这个方法名称对应函数体:function (form, data, siteCode) {}, 如果实现该方法, 对象自带的提交方法失效
15> form-vali-msg: 一个自定义方法名称, 点击提交按钮验证数据时执行, 这个方法名称对应函数体:function (form, control, msg) {}
*/
var formTable = function () {
if (this == window) {
return new formTable();
}
this.rgEx = (function () {
this.rgType = /\<([a-z]+)\s+([^\<]*)(form\-type)\=((\"([^\"]+)\")|(\'([^\']+)\'))([^\<]*)\>/i;
this.rgTypeForm = /\<([a-z]+)\s+([^\<]*)(form\-type)\=((\"(form)\")|(\'(form)\'))([^\<]*)\>/i;
this.rgTypeSubmit = /\<([a-z]+)\s+([^\<]*)(form\-type)\=((\"(submit)\")|(\'(submit)\'))([^\<]*)\>/i;
this.rgTypeCancel = /\<([a-z]+)\s+([^\<]*)(form\-type)\=((\"(cancel)\")|(\'(cancel)\'))([^\<]*)\>/i;
this.rgTypeMsg = /\<([a-z]+)\s+([^\<]*)(form\-type)\=((\"(msg)\")|(\'(msg)\'))([^\<]*)\>/i;
this.rgTypeEnter = /\<([a-z]+)\s+([^\<]*)(form\-type)\=((\"(enter)\")|(\'(enter)\'))([^\<]*)\>/i;
this.rgTypeFocus = /\<([a-z]+)\s+([^\<]*)(form\-type)\=((\"(focus)\")|(\'(focus)\'))([^\<]*)\>/i;
this.rgSiteCode = /\<([a-z]+)\s+([^\<]*)(form\-site\-code)\=((\"([^\"]+)\")|(\'([^\']+)\'))([^\<]*)\>/i;
this.rgAction = /\<([a-z]+)\s+([^\<]*)(form\-action)\=((\"([^\"]+)\")|(\'([^\']+)\'))([^\<]*)\>/i;
this.rgSource = /\<([a-z]+)\s+([^\<]*)(form\-source)\=((\"([^\"]+)\")|(\'([^\']+)\'))([^\<]*)\>/i;
this.rgData = /\<([a-z]+)\s+([^\<]*)(form\-data)\=((\"([^\"]+)\")|(\'([^\']+)\'))([^\<]*)\>/i;
this.rgDataOption = /\<([a-z]+)\s+([^\<]*)(form\-data\-option)\=((\"([^\"]+)\")|(\'([^\']+)\'))([^\<]*)\>/i;
this.rgDataRow = /\<([a-z]+)\s+([^\<]*)(form\-data\-row)\=((\"([^\"]+)\")|(\'([^\']+)\'))([^\<]*)\>/i;
this.rgResult = /\<([a-z]+)\s+([^\<]*)(form\-result)\=((\"([^\"]+)\")|(\'([^\']+)\'))([^\<]*)\>/i;
this.rgCancel = /\<([a-z]+)\s+([^\<]*)(form\-cancel)\=((\"([^\"]+)\")|(\'([^\']+)\'))([^\<]*)\>/i;
this.rgCancelOption = /\<([a-z]+)\s+([^\<]*)(form\-cancel\-option)\=((\"([^\"]+)\")|(\'([^\']+)\'))([^\<]*)\>/i;
this.rgSendData = /\<([a-z]+)\s+([^\<]*)(form\-send\-data)\=((\"([^\"]+)\")|(\'([^\']+)\'))([^\<]*)\>/i;
this.rgValiMsg = /\<([a-z]+)\s+([^\<]*)(form\-vali\-msg)\=((\"([^\"]+)\")|(\'([^\']+)\'))([^\<]*)\>/i;
this.rgSubmit = /\<([a-z]+)\s+([^\<]*)(form\-submit)\=((\"([^\"]+)\")|(\'([^\']+)\'))([^\<]*)\>/i;
});
this.rgEx();
this.focusObj = null;
this.forms = []; //{action:'',source:'', msg: null, submit: null, result: '', cancel: null, children:[{dom:[], tagname: '', domtype: '',fieldname:'',fieldvalue:'', vali:'', err:'' , key: true}]}
this.getFunc = (function (fName) {
var s = null == fName ? '' : fName;
if (0 == s.length) return;
var arr = null;
if (-1 != s.indexOf('.')) {
arr = s.split('.');
}
else {
arr = [s];
}
var fnObj = null;
var nlen = arr.length;
var rgFn = /[^\.\(\)]+/;
var fn = '';
for (var ii = 0; ii < nlen; ii++) {
var arr1 = rgFn.exec(arr[ii]);
if (null == arr1) break;
fn = arr1[0];
fnObj = 0 == ii ? window[fn] : (null == fnObj ? null : fnObj[fn]);
}
return fnObj;
});
this.findEleByContent = (function (obj, tag, atr, content) {
var arr1 = [];
var e = null;
if (null != atr) {
var s = atr;
var rg = /([^\s\"\=]+)\s*\=\s*((\"([^\"]+)\")|(\'([^\']+)\'))/;
var arr = rg.exec(s);
var s1 = ',class,style,';
while (null != arr) {
var v = null == arr[4] ? arr[6] : arr[4];
var t = ',' + arr[1].toLowerCase() + ',';
if (-1 == s1.indexOf(t)) {
if (null == e) {
e = { tag: arr[1], val: v };
}
else if (e.val.length < v.length) {
e = { tag: arr[1], val: v };
}
}
arr1[arr1.length] = { tag: arr[1].toLowerCase(), val: v };
s = s.replace(arr[0], '');
arr = rg.exec(s);
}
}
if (null == e) {
var len = arr1.length;
for (var i = 0; i < len; i++) {
if ('style' == arr1[i].tag) {
e = arr1[i];
break;
}
else if ('class' == arr1[i].tag) {
e = arr1[i];
break;
}
}
}
var s = tag;
if (null != e) {
s = tag + '[' + e.tag + '=\"' + e.val + '\"]';
}
var ctl = null;
$(obj).find(s).each(function () {
var t = $(this).html();
if (t == content) {
ctl = this;
}
});
return ctl;
});
//{ e: [], tg: tg, v: v, t: txt }
this.matchEle = (function (rg, obj, txt, rmoveMatch) {
if (null == this.matchEleNum) this.matchEleNum = 0;
if (200 < this.matchEleNum) return {};
this.matchEleNum++;
if (null == txt) {
txt = $(obj)[0].outerHTML;
}
rmoveMatch = null == rmoveMatch ? false : rmoveMatch;
var div1 = document.createElement('div');
$(div1).insertAfter($(obj));
$(obj).appendTo($(div1));
if (1 == this.matchEleNum) {
var mbool = false;
var html = txt;
var s1 = '\\<([a-z]+)(\\s+[^\\<]+)?\\>([^\\>]*\\{\\{([^\\{]+)\\}\\}[^\\>]*)\\<\\/[a-z]+\\>';
var rg1 = new RegExp(s1, 'i');
var arr = rg1.exec(html);
if (null != arr) mbool = true;
while (null != arr) {
var ctl = this.findEleByContent(div1, arr[1], arr[2], arr[3]);
if (null == ctl) break;
var v1 = arr[4];
var s2 = arr[3].replace('{{' + v1 + '}}', '<span ' + arr[2] + ' form-data="' + v1 + '"></span>');
$(ctl).html(s2);
html = html.replace(arr[3], s2);
arr = rg1.exec(html);
}
s1 = '\\<input[^\\<]+\\{\\{([^\\{]+)\\}\\}[^\\<]+\\/?\\>';
rg1 = new RegExp(s1, 'i');
arr = rg1.exec(html);
if (null != arr) mbool = true;
while (null != arr) {
var v1 = arr[1];
var ctl = $(div1).find('input[value="{{' + v1 + '}}"]');
if (null == ctl) break;
ctl.val('');
ctl.attr('form-data', v1);
ctl.attr('value', '');
var s2 = arr[0].replace('{{' + v1 + '}}', '');
var input1 = $(s2);
input1.val('');
input1.attr('form-data', v1);
s2 = input1[0].outerHTML;
html = html.replace(arr[0], s2);
arr = rg1.exec(html);
}
if (mbool) {
if (rmoveMatch) {
txt = html;
}
else {
txt = $(obj)[0].outerHTML;
}
}
}
var a = rg.exec(txt);
if (null == a) return {};
var tg = a[1];
var sg = a[3];
var v = a[6];
var s = tg + '[' + sg + '="' + v + '"]';
var e = [];
$(div1).find(s).each(function () {
e[e.length] = this;
if (rmoveMatch) {
txt = txt.replace(this.outerHTML, '');
}
});
$(obj).insertAfter($(div1));
$(div1).remove();
return { e: e, tg: tg, v: v, t: txt };
});
this.getEleValue = (function (obj, tagName, type) {
var val = '';
tagName = tagName.toLowerCase();
if ('input' == tagName) {
type = null == type ? 'text' : type;
type = type.toLowerCase();
if ('radio' == type || 'checkbox' == type) {
var len = obj.length;
for (var i = 0; i < len; i++) {
if ($(obj[i])[0].checked) {
if (0 == val.length) {
val = $(obj[i]).val();
}
else {
val += ',' + $(obj[i]).val();
}
if ('radio' == type) break;
}
}
}
else {
val = $(obj[0]).val();
}
}
else if ('select' == tagName) {
var e = $(obj[0])[0];
val = e.options[e.selectedIndex].value;
}
else {
val = $(obj[0]).text();
}
return val;
});
//{dom:[], tagname: '', domtype: '',fieldname:'',fieldvalue:'', vali:''}
this.initData = (function (form, data) {
if (null == data) return;
if (!isJson(data)) return;
if (null == form.data) form.data = {};
for (var k in data) {
form.data[k] = data[k];
}
var childs = form.children;
var len = childs.length;
var isSubmit = false;
var dataRowFunc = null;
if (null != form.dataRow) {
dataRowFunc = this.getFunc(form.dataRow);
if (null != dataRowFunc) {
dataRowFunc.apply(this, [childs, data, isSubmit]);
}
}
var dataOptFunc = null;
for (var k in data) {
for (var i = 0; i < len; i++) {
if (childs[i].fieldname == k) {
if (null != form.dataOption) {
dataOptFunc = this.getFunc(form.dataOption);
if (null != dataOptFunc) {
dataOptFunc.apply(this, [childs[i].dom, k, data[k], isSubmit]);
}
}
childs[i].fieldvalue = data[k];
if ('input' == childs[i].tagname) {
if ('radio' == childs[i].domtype) {
var rds = childs[i].dom;
var xlen = rds.length;
for (var x = 0; x < xlen; x++) {
var xv = $(rds[x]).val();
$(rds[x])[0].checked = false;
if (xv == data[k]) {
$(rds[x])[0].checked = true;
break;
}
}
}
else if ('checkbox' == childs[i].domtype) {
var avs = ',' + data[k] + ',';
var chks = childs[i].dom;
var xlen = chks.length;
for (var x = 0; x < xlen; x++) {
var xv = ',' + $(chks[x]).val() + ',';
$(chks[x])[0].checked = false;
if (-1 != avs.indexOf(xv)) {
$(chks[x])[0].checked = true;
}
}
}
else {
var input1 = childs[i].dom;
$(input1).each(function () {
$(this).val(data[k]);
});
}
}
else if ('select' == childs[i].tagname) {
var slts = childs[i].dom;
slts = $(slts[0])[0];
slts.options[0].selectedIndex = 0;
var xlen = slts.options.length;
for (var x = 0; x < xlen; x++) {
if (data[k].toString().toLowerCase() == slts.options[x].value.toLowerCase()) {
slts.selectedIndex = x;
break;
}
}
}
else {
var dm = childs[i].dom;
$(dm).each(function () {
$(this).html(data[k]);
})
}
break;
}
}
}
});
this.loadData = (function () {
this.loadData.obj = this;
this.loadData.len = this.forms.length;
this.loadData.forms = this.forms;
this.loadData.n = 0;
//{action:'',source:'', auto: true, msg: null, submit: null, cancel: null
this.loadData.for = function () {
if (this.n >= this.len) {
this.n = this.len - 1;
return;
}
var fm = this.forms[this.n];
var mbool = true;
fm.source = null == fm.source ? '' : fm.source;
var sourceFunc = null;
if (0 == fm.source.length) {
mbool = false;
}
else {
sourceFunc = this.obj.getFunc(fm.source);
if (null == sourceFunc) mbool = false;
}
fm.parentObj = this;
fm.setData = (function (data) {
this.parentObj.obj.initData(this, data);
});
if (mbool) {
try {
sourceFunc.apply(this.obj, [fm]);
} catch (e) {
}
}
if (this.n < this.len - 1) {
this.n++;
this.for();
}
}
this.loadData.for();
});
//notnull\phone\email\idcode\n\n{1}\n{3,5}\n{5,}\n{,5}\s{1}\s{3,5}\s{5,}\s{,5}\[正则表达式]
this.validate = {
notnull: function (a, m) {
if (null != m) m.msg = '数据不能为空';
if (null == a) return false;
if (0 == a.toString().length) return false;
var s = a.replace(/\s/g, '');
if (0 == s.toString().length) return false;
return true;
},
phone: function (a, m) {
if (null != m) m.msg = '输入的电话号码不正确';
if (null == a) return true;
if (0 == a.toString().length) return true;
var s = a.replace(/\s/g, '');
if (0 == s.toString().length) return true;
var rg = /^[0-9]{10}[0-9]$/;
return (null != rg.exec(s));
},
email: function (a, m) {
if (null != m) m.msg = '邮箱地址格式不正确';
if (null == a) return true;
if (0 == a.toString().length) return true;
var s = a.replace(/\s/g, '');
if (0 == s.toString().length) return true;
var rg = /[0-9a-z_]+\@[0-9a-z_]+\.[0-9a-z_]+/i;
return (null != rg.exec(s));
},
idcode: function (a, m) {
if (null != m) m.msg = '身份证号码不正确';
if (null == a) return true;
if (0 == a.toString().length) return true;
var s = a.replace(/\s/g, '');
if (0 == s.toString().length) return true;
var num = s;
num = num.toUpperCase();
if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {
return false;
}
var len, re;
len = num.length;
if (len == 15) {
re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
var arrSplit = num.match(re);
var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
var bGoodDay;
bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
if (!bGoodDay) {
return false;
} else {
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var nTemp = 0, i;
num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);
for (i = 0; i < 17; i++) {
nTemp += num.substr(i, 1) * arrInt[i];
}
num += arrCh[nTemp % 11];
return true;
}
}
if (len == 18) {
re = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
var arrSplit = num.match(re);
var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
var bGoodDay;
bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
if (!bGoodDay) {
return false;
} else {
var valnum;
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var nTemp = 0, i;
for (i = 0; i < 17; i++) {
nTemp += num.substr(i, 1) * arrInt[i];
}
valnum = arrCh[nTemp % 11];
if (valnum != num.substr(17, 1)) {
return false;
}
return true;
}
}
return false;
},
num: function (a, n1, n2) {
if (null == a) return true;
if (0 == a.toString().length) return true;
var s = a.toString().replace(/\s/g, '');
if (0 == s.toString().length) return true;
if (isNaN(s)) return false;
var s1 = '';
if (null != n1) {
s1 = n1.toString();
if (false == isNaN(s1)) {
if (null != n2) {
if (n1 > s.length && 0 < n1) return false;
}
else {
if (n1 != s.length && 0 < n1) return false;
}
}
}
if (null != n2) {
s1 = n2.toString();
if (false == isNaN(s1)) {
if (n2 < s.length && 0 < n2) return false;
}
}
return true;
},
char: function (a, n1, n2) {
if (null == a) return true;
if (0 == a.toString().length) return true;
var s = a.toString().replace(/\s/g, '');
if (0 == s.toString().length) return true;
s = a.toString();
var s1 = '';
if (null != n1) {
s1 = n1.toString();
if (false == isNaN(s1)) {
if (null != n2) {
if (n1 > s.length && 0 < n1) return false;
}
else {
if (n1 != s.length && 0 < n1) return false;
}
}
}
if (null != n2) {
s1 = n2.toString();
if (false == isNaN(s1)) {
if (n2 < s.length && 0 < n2) return false;
}
}
return true;
},
regExp: function (a, rg) {
a = null == a ? '' : a;
if (null == rg) return true;
if (0 == rg.toString().length) return true;
var s1 = a.toString();
var s = rg.toString().replace(/\s/g, '');
if (0 == rg.toString().length) return true;
var r = new RegExp(s, 'i');
var arr = r.exec(s1);
return (null != arr);
}
}
this.valiFn = (function (form) {
var childs = form.children;
var len = childs.length;
var mbool = true;
var rgNum = /(^n$)|(^n\{([0-9]+)\}$)|(^n\{([0-9]*)\,([0-9]*)\}$)/;
var rgChar = /(^s\{([0-9]+)\}$)|(^s\{([0-9]*)\,([0-9]*)\}$)/;
var vObj = this.validate;
var ctl = null;
var msg = '';
for (var i = 0; i < len; i++) {
var tp = childs[i].domtype;
tp = null == tp ? '' : tp;
tp = tp.toLowerCase();
if ('radio' == tp || 'checkbox' == tp) continue;
var vl = childs[i].vali;
ctl = childs[i].dom;
vl = null == vl ? '' : vl;
if (0 < vl.length) {
var v = childs[i].fieldvalue;
var s = vl.replace(/\s/g, '');
var erg = '';
if ('[' == s.substr(0, 1) && ']' == s.substr(s.length - 1, 1)) {
vl = s.substring(1, s.length - 1);
mbool = vObj.regExp(v, vl);
erg = '[]';
msg = '数据与你规定的正则表达式不匹配';
}
else {
var arr = [];
if (-1 != s.indexOf('|')) {
arr = s.split('|');
}
else {
arr = [s];
}
var nlen = arr.length;
var n1, n2;
for (var x = 0; x < nlen; x++) {
n1 = null, n2 = null;
var rgs = arr[x];
if (null != rgNum.exec(rgs)) {
var a = rgNum.exec(rgs);
if (null != a[4]) {
n1 = a[4];
}
else {
n1 = a[6];
n2 = a[7];
}
mbool = vObj.num(v, n1, n2);
erg = 'n';
msg = '数据格式不正确,必须输入一个有效的数字';
}
else if (null != rgChar.exec(rgs)) {
var a = rgChar.exec(rgs);
if (null != a[2]) {
n1 = a[2];
}
else {
n1 = a[4];
n2 = a[5];
}
mbool = vObj.char(v, n1, n2);
erg = 's';
msg = '字符串长度不达标';
}
else {
erg = rgs;
if (null != vObj[rgs]) {
var m = {};
mbool = vObj[rgs](v, m);
msg = m.msg;
}
}
if (!mbool) break;
}
if (!mbool) {
if (null != childs[i].err) {
var s1 = erg + '\\{([^\\{]+)\\}';
var r = new RegExp(s1, 'i');
if (null != r.exec(childs[i].err)) {
var b = r.exec(childs[i].err);
msg = b[1];
}
else if (1 == nlen) {
msg = childs[i].err;
}
}
break;
}
}
if (!mbool) {
if (null != childs[i].err) {
var s1 = '\\[\\]\\{([^\\{]+)\\}';
var r = new RegExp(s1, 'i');
if (null != r.exec(childs[i].err)) {
var b = r.exec(childs[i].err);
msg = b[1];
}
else {
msg = childs[i].err;
}
}
}
}
if (!mbool) break;
}
if (!mbool) {
this.showMsg(form, msg, ctl[0]);
$(ctl[0]).select();
}
return mbool;
});
this.showMsg = (function (form, msg, ctl) {
var mg = null;
if (null != form.valiMsg) {
mg = this.getFunc(form.valiMsg);
}
msg = null == msg ? '' : msg;
if (null != mg) {
if (0 == msg.length) return;
mg.apply(form, [form, ctl, msg]);
}
else if (null != form.msg) {
$(form.msg).html(msg);
}
else {
if (0 == msg.length) return;
alert(msg);
}
});
this.sendData = (function (form, data) {
var action = form.action;
action = null == action ? '' : action;
if (null == action.length) {
this.showMsg(form, 'form-action属性值不能为空', form);
return;
}
var result = form.result;
result = null == result ? '' : result;
var resultFunc = null;
if (0 < result.length) {
if (0 < result.length) {
resultFunc = this.getFunc(result);
}
}
//ExtAjax.VisitCode
var siteCode = form.siteCode;
siteCode = null == siteCode ? '' : siteCode;
if ((-1 != siteCode.indexOf('[') && -1 != siteCode.indexOf(']')) || -1 != siteCode.indexOf('.')) {
var arr = /\[([^\[]+)\]/.exec(siteCode);
if (null != arr) {
var s = siteCode.replace(arr[0], '');
siteCode = arr[1];
siteCode = siteCode.replace('"', '');
siteCode = siteCode.replace("'", "");
siteCode = s + '.' + siteCode;
}
arr = siteCode.split('.');
var nlen = arr.length;
for (var i = 0; i < nlen; i++) {
siteCode = 0 == i ? window[arr[i]] : (null == siteCode ? {} : siteCode[arr[i]]);
}
}
ExtAjax({
url: action,
datas: data,
result: resultFunc,
formObj: this,
form: form,
VisitCode: siteCode,
success: function (dt) {
var resultFunc = this.result;
if (null != resultFunc) {
resultFunc.apply(form, [dt]);
}
else {
var s = '';
if (null != dt) {
if (isJson(dt)) {
for (var k in dt) {
s += ',"' + k + '": "' + dt[k] + '"';
}
if (0 < s.length) s = s.substr(1);
}
else {
s = dt.toString();
}
}
s = 0 == s.length ? 'NULL' : s;
s = '{' + s + '}';
this.formObj.showMsg(this.form, s);
}
}
});
});
this.submit = (function (form) {
var fm1 = form;
var childs = fm1.children;
var len1 = childs.length;
var dt = {};
var dataOptFunc = null;
for (var i = 0; i < len1; i++) {
var v1 = this.getEleValue(childs[i].dom, childs[i].tagname, childs[i].domtype);
if (null != fm1.dataOption) {
dataOptFunc = this.getFunc(fm1.dataOption);
if (null != dataOptFunc) {
var v2 = dataOptFunc.apply(this, [childs[i].dom, childs[i].fieldname, v1, isSubmit]);
if (null != v2) {
if (isJson(v2)) v2 = null;
}
v1 = null == v2 ? v1 : v2;
}
}
childs[i].fieldvalue = v1;
dt[childs[i].fieldname] = v1;
}
var mbool = true;
var dataRowFunc = null;
if (null != fm1.dataRow) {
dataRowFunc = this.getFunc(fm1.dataRow);
if (null != dataRowFunc) {
mbool = dataRowFunc.apply(fm1, [childs, dt, true]);
mbool = null == mbool ? true : mbool;
}
}
if (mbool) {
mbool = this.valiFn(fm1);
}
if (mbool) {
this.showMsg(fm1, '', fm1);
var sendDt = null;
if (null != fm1.sendData) {
sendDt = this.getFunc(fm1.sendData);
}
if (null == sendDt || false == fm1.submitCallback.isAuto) {
fm1.submitCallback.isAuto = true;
this.sendData(fm1, dt);
}
else {
sendDt.apply(this, [fm1.submitCallback, dt]);
}
}
});
this.initEvent = (function () {
var fms = this.forms;
var len = fms.length;
for (var i = 0; i < len; i++) {
var fm = fms[i];
if (null != fm.submit) {
$(fm.submit)[0].obj = this;
$(fm.submit)[0].formObj = fm;
$(fm.submit).bind('click', function () {
var fm1 = this.formObj;
this.obj.submit(fm1);
});
}
fm.submitCallback = {
form: fm,
obj: this,
isAuto: true,
submit: function () {
this.isAuto = false;
this.obj.submit(this.form);
}
}
if (null != fm.submitFn) {
var submitFn = this.getFunc(fm.submitFn);
if (null != submitFn) {
submitFn.apply(fm, [fm.submitCallback]);
}
}
if (null != fm.cancel) {
$(fm.cancel)[0].obj = this;
$(fm.cancel)[0].formObj = fm;
$(fm.cancel).bind('click', function () {
var fm1 = this.formObj;
var childs = fm1.children;
var len1 = childs.length;
var dt = {};
for (var i = 0; i < len1; i++) {
dt[childs[i].fieldname] = childs[i].fieldvalue;
}
var mbool = true;
if (null != this.formObj.cancelFn) {
var cancelFunc = this.obj.getFunc(this.formObj.cancelFn);
if (null != cancelFunc) {
mbool = cancelFunc.apply(this, [fm1, dt]);
mbool = null == mbool ? true : mbool;
}
}
if (mbool) {
var cancelOpt = function () { };
if (null != this.formObj.cancelOption) {
var cancelOptFn = this.obj.getFunc(this.formObj.cancelOption);
if (null != cancelOptFn) {
cancelOpt = cancelOptFn;
}
}
dt = {};
for (var i = 0; i < len1; i++) {
mbool = cancelOpt.apply(this, [childs[i].fieldname, childs[i].fieldvalue]);
mbool = null == mbool ? true : mbool;
if (childs[i].key) mbool = false;
if (mbool) {
dt[childs[i].fieldname] = '';
}
}
this.obj.initData(this.formObj, dt);
}
});
}
if (null != fm.enter) {
var enterObj = { obj: this, formObj: fm };
$(fm.enter).each(function () {
for (var k in enterObj) {
this[k] = enterObj[k];
}
$(this).bind('keyup', function () {
var e = null != window.event ? window.event : window.Event;
if (13 == e.keyCode) {
var fm1 = this.formObj;
this.obj.submit(fm1);
}
});
})
}
}
});
this.init = (function () {
if (null != this.lockInit) return;
this.lockInit = this.init;
var txt = window.document.body.innerHTML;
var arr = this.rgTypeForm.exec(txt);
if (null == arr) return;
var formNum = 0;
while (null != arr) {
formNum++;
this.matchEleNum = 0;
txt = txt.replace(arr[0], '');
var tg = arr[1];
var s = tg + '[form-type="form"]';
var fm = $(document.body).find(s)[0];
$(fm).attr('form-type', 'form-' + formNum);
var id = $(fm).attr('id');
var ele = { id: id }; //{action:'',source:'', msg: null, submit: null, result: '', cancel: null
var e = this.matchEle(this.rgAction, fm);
ele.action = e.v;
e = this.matchEle(this.rgSource, fm);
ele.source = e.v;
e = this.matchEle(this.rgDataOption, fm);
ele.dataOption = e.v;
e = this.matchEle(this.rgDataRow, fm);
ele.dataRow = e.v;
e = this.matchEle(this.rgSiteCode, fm);
ele.siteCode = e.v;
e = this.matchEle(this.rgResult, fm);
ele.result = e.v;
e = this.matchEle(this.rgCancel, fm);
ele.cancelFn = e.v;
e = this.matchEle(this.rgCancelOption, fm);
ele.cancelOption = e.v;
e = this.matchEle(this.rgSendData, fm);
ele.sendData = e.v;
e = this.matchEle(this.rgValiMsg, fm);
ele.valiMsg = e.v;
e = this.matchEle(this.rgSubmit, fm);
ele.submitFn = e.v;
e = this.matchEle(this.rgTypeMsg, fm);
ele.msg = null == e.e ? null : e.e[0];
e = this.matchEle(this.rgTypeEnter, fm);
ele.enter = null == e.e ? null : e.e[0];
e = this.matchEle(this.rgTypeSubmit, fm);
ele.submit = null == e.e ? null : e.e[0];
e = this.matchEle(this.rgTypeCancel, fm);
ele.cancel = null == e.e ? null : e.e[0];
e = this.matchEle(this.rgTypeFocus, fm);
ele.focus = null == e.e ? null : e.e[0];
this.focusObj = ele.focus;
var childs = [];
e = this.matchEle(this.rgData, fm, null, true);
ele.data = {};
while (null != e.e) {
var ee = $(e.e[0]);
var tp = ee.attr('type');
var vali = ee.attr('form-vali');
var err = ee.attr('form-err');
var key = ee.attr('form-key');
key = null == key ? false : true;
var v = this.getEleValue(e.e, e.tg, tp);
var c = { dom: e.e, tagname: e.tg, domtype: tp, fieldname: e.v, fieldvalue: v, vali: vali, err: err, key: key };
var tagname = e.tg.toLowerCase();
if ('input' == tagname || 'select' == tagname || 'textarea' == tagname) {
var e1 = e.e;
var len1 = e1.length;
for (var xi = 0; xi < len1; xi++) {
var qe1 = $(e1[xi]);
qe1[0].dt = c;
qe1[0].data = ele.data;
qe1[0].data[c.fieldname] = '';
qe1[0].field_name = c.fieldname;
if ('text' == tp || 'password' == tp || 'textarea' == tagname) {
qe1.bind('blur', function () {
this.dt.fieldvalue = this.value;
this.data[this.field_name] = this.value;
});
}
else if ('radio' == tp) {
qe1.bind('click', function () {
this.dt.fieldvalue = this.value;
this.data[this.field_name] = this.value;
});
}
else if ('checkbox' == tp) {
qe1.bind('click', function () {
var v = this.dt.fieldvalue;
v = null == v ? '' : v;
if (this.checked) {
if (0 == v.length) {
v = this.value;
}
else {
v += ',' + this.value;
}
}
else {
var v1 = this.value;
var arr1 = v.split(',');
var len1 = arr1.length;
v = '';
for (var ii = 0; ii < len1; ii++) {
if (v1 == arr1[ii]) continue;
v += ',' + arr1[ii];
}
if (0 < v.length) v = v.substr(1);
}
this.dt.fieldvalue = v;
this.data[this.field_name] = v;
});
}
else if ('select' == tagname) {
qe1.bind('change', function () {
var v = this.options[this.selectedIndex].value;
this.dt.fieldvalue = v;
this.data[this.field_name] = v;
});
}
}
}
childs[childs.length] = c;
var html = e.t;
e = this.matchEle(this.rgData, fm, html, true);
}
ele.children = childs;
this.forms[this.forms.length] = ele;
arr = this.rgTypeForm.exec(txt);
}
this.initEvent();
this.loadData();
if (null == this.focusObj) return;
$(this.focusObj).setFocus();
});
this.init();
}
var FormTable$ = null;
$(document).ready(function () {
FormTable$ = formTable();
});