关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务QQ: 69893005、418799587 商务热线(5*8小时): 010-64808099 官方邮箱: jeecgos@163.com

查看: 14106|回复: 2

[UI标签] tr.Validform is not a function 子表校验问题

[复制链接]
发表于 2018-3-8 15:08:14 | 显示全部楼层 |阅读模式
本帖最后由 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"  然后保存仍然报错,但是好用的那个功能 就可以正常保存
很奇怪不知道为什么会这样,诸位大神有没有方法解决这个问题?我的目的是最好能找到这个报错的原因,如果实在找不到,有没有其它的方法来实现这种子记录的逐行校验,感谢各位!!



校验逻辑

校验逻辑
发表于 2018-3-8 16:44:58 | 显示全部楼层

回帖奖励 +5 金钱

提示的错,应该没意义,看看哪里逻辑有问题
发表于 2018-3-8 16:45:05 | 显示全部楼层
tr 换成form标签对象试试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表