|
本帖最后由 workhd 于 2018-3-8 15:33 编辑
各位大神,我有一个子表校验的问题请教下,希望能给些建议。
原来的子表上的校验只是单个字段的提示,我想弄一个特定地方显示的提示语句,然后就给每行添加了一个class类,保存操作前 校验这个class的tr行,把提示汇总到一起显示。预期效果:
预期效果
结果总是有报错js 无法保存
curdtools_zh-cn.js:873 Uncaught TypeError: tr.Validform is not a function
at HTMLTableRowElement.<anonymous> (curdtools_zh-cn.js:873)
at Function.each (jquery-1.8.3.js:611)
at init.each (jquery-1.8.3.js:241)
at _init.saveBtnFunction (curdtools_zh-cn.js:870)
at _init._click (eval at <anonymous> (lhgdialog.min.js:7), <anonymous>:1:13230)
at HTMLDivElement.eval (eval at <anonymous> (lhgdialog.min.js:7), <anonymous>:1:14103)
at HTMLDivElement.dispatch (jquery-1.8.3.js:3058)
at HTMLDivElement.eventHandle (jquery-1.8.3.js:2676)
保存前js 我是这么写的:
iframe = this.iframe.contentWindow;
var formobj = $('.formtable',iframe.document);//获取主表
var formobj2 = $('.list_detail',iframe.document);//获取子表行
if(formobj2.length==0){// 子表无记录直接保存
saveObj();
return false;
}
var objtip=$("#errMsg", iframe.document);//
var flag=true;
var oldMsg="";
$('.list_detail',iframe.document).each(function(index,el){//按每个tr 进行校验
var tr=$(this);
var errMsgTemp="";
var demo=tr.Validform({
tiptype:function(msg,o,cssctl){
//debugger;
cssctl(objtip,3);
},
label:".label",
showAllError:true,
ajaxPost:true
});//将每个tr设置校验属性
if(!demo.check()){//校验tr
flag=false;
var lineNo=parseInt(index)+1;
oldMsg+=lineNo+","
}
})
if(!flag){
oldMsg="第"+oldMsg.substring(0, oldMsg.length-1)+"行:存在必填未输入或者输入有误的内容!";
}
==========================================
我看了下子页面源代码加载完成后校验的那些js都加载了
<link rel="stylesheet" href="plug-in/Validform/css/metro/style.css?v=V46" type="text/css"/><link rel="stylesheet" href="plug-in/Validform/css/metro/tablefrom.css?v=V46" type="text/css"/><script type="text/javascript" src="plug-in/Validform/js/Validform_v5.3.1_min_zh-cn.js"></script><script type="text/javascript" src="plug-in/Validform/js/Validform_Datatype_zh-cn.js"></script><script type="text/javascript" src="plug-in/Validform/js/datatype_zh-cn.js"></script><SCRIPT type="text/javascript" src="plug-in/Validform/plugin/passwordStrength/passwordStrength-min.js"></SCRIPT><script type="text/javascript">$(function(){var demo=$("#formobj").Validform({tiptype:3,btnSubmit:"#btn_sub",btnReset:"#btn_reset",ajaxPost:true,usePlugin:{passwordstrength:{minLen:6,maxLen:18,trigger:function(obj,error){if(error){obj.parent().next().find(".Validform_checktip").show();obj.find(".passwordStrength").hide();}else{$(".passwordStrength").show();obj.parent().next().find(".Validform_checktip").hide();}}}},callback:function(data){var win = frameElement.api.opener; debugger; if (data.success == true) {var busiObj = data.obj; if(busiObj){ $('#id').val(busiObj.id); if($('#backfillFieldNames').length>0){ var backfillFieldNameArr = $('#backfillFieldNames').val().split(','); for (var i = 0; i < backfillFieldNameArr.length; i++) { $('#'+backfillFieldNameArr).val(busiObj[backfillFieldNameArr]); } } } var msg = data.msg; if(msg.indexOf('成功')>0){ win.tip(msg); $.Hidemsg();} else { $.messager.alert('提示信息',msg); $.Hidemsg(); } } else { if (data.responseText == ''|| data.responseText == undefined) { $.messager.alert('提示信息',data.msg); $.Hidemsg(); } else {try { var emsg = data.responseText.substring(data.responseText.indexOf('错误描述'),data.responseText.indexOf('错误信息'));$.messager.alert('错误', emsg);$.Hidemsg(); } catch (ex) {$.messager.alert('错误', data.responseText + "");$.Hidemsg();} }return false;}win.reloadTable();}});demo.tipmsg.s ='必填'; demo.tipmsg.r ='√'; }); </script></form>
按这个逻辑我实现了一个功能的这种提示,但是另一个功能就是一直报这个错tr.Validform ,两个功能都是online表单生成的代码,然后我试了下面2种方法排错:
1、把好用的功能复制出一个新功能,主子表字段相关的部分全替换成有问题的那个功能--结果仍然报错
2、有错的功能只保留主表页面,注释掉子表页面,在主表table的tr上加上class="list_detail" 然后保存仍然报错,但是好用的那个功能 就可以正常保存
很奇怪不知道为什么会这样,诸位大神有没有方法解决这个问题?我的目的是最好能找到这个报错的原因,如果实在找不到,有没有其它的方法来实现这种子记录的逐行校验,感谢各位!!。
|
-
校验逻辑
|