第一步:制作表格
var data = ${empty data ? "''" : data}; var kpiTabData = data["kpiTabData"]; var kpiObjectList = data["kpiObjectList"]; var row3 = '<tr name="data_row">'; row3 += '<td name="row_checkbox" height="26px" style="text-align:center"><a class="icon-remove" title="Delete" style="cursor:pointer;"></a><input name="id" type="hidden" value="" /><input name="sno" type="hidden" value="" /></td>'; row3 += '<td name="level"><input type="text" value="" /></td>'; row3 += '<td name="M-1"><input type="text" value="" /></td>'; row3 += '<td name="remark" class="bg_green" style="200px;"><textarea class="bg_green" style="100%;border:0px solid" maxlength="500"></textarea></td>'; row3 += '</tr>';
第二步:遍历list,将数据传入表格中
if(kpiObjectList){ addKpiListRows(); }else{ addRow3(1,1,projectCode); } function addKpiListRows(){ if(kpiObjectList.length > 0){ for(var k=0;k<kpiTabData.length;k++){ for(var i=0;i<kpiObjectList.length;i++){ var rowobj = $(row3); $(rowobj).attr("id","row_"+ i); $(rowobj).find("td[name='row_checkbox']").find("input[name='sno']").val(kpiObjectList[i]["sort"]); $(rowobj).find("td[name='row_checkbox']").find("input[name='id']").val(kpiObjectList[i]["id"]); $(rowobj).find("td[name='level']").find("input").val(kpiObjectList[i]["kpiIndName"]); $(rowobj).find("td[name='M-1']").find("input").val(kpiObjectList[i]["kpiIndRequire"]); $(rowobj).find("td[name='remark']").children("textarea").val(kpiObjectList[i]["remarks"]); if(kpiObjectList[i]["kpiIndTypeValue"]==kpiTabData[k]["value"]){ // 判断语句十分关键 会从这个判断语句找到相应的叶签将数据放上去 $("#kpi"+kpiTabData[k]["value"]).append($(rowobj)); //将数据添加到相应的标签上 } } } }else{ addRow3(1,1,projectCode); } }
第三步:制作活体叶签
<div class="page_step2"> <div class="page_con"> <h1> <div class="accordion-heading"> <a class="accordion-toggle collapsed" data-toggle="collapse" data-href="collapsekpi" href="#collapsekpi"> <i class="icon-chevron-right"></i> <span class="projectCss">合同要求KPI/KQI</span> </a> </div> </h1> <div style="height:10px;"> </div> <!--- //叶签制作 --> <div id="collapsekpi" class="panel-collapse collapse"> <ul id="myTab" class="nav nav-tabs"> <c:forEach items="${kpiTabList}" var="item" varStatus="status"> <li><a href="#tab${item.value}" data-toggle="tab">${item.label}</a></li> </c:forEach> </ul> <div id="myTabContent" class="tab-content"> <!---遍历list将叶签放在表头位置,实现活(叶签)样式 --> <c:forEach items="${kpiTabList}" var="item" varStatus="status"> <div class="tab-pane fade" id="tab${item.value}"> <!---将table的id的名称附上活的id值 便于对应相应的表格,便于js遍历处的数据放在相应得table表格上 --> <table id="kpi${item.value}" width="100%" cellpadding="0" cellspacing="0"> <tr class="tb_tt"> <td style=" 80px;">操作</td> <td>KPI 指标名称<font color="red">*</font></td> <td>指标要求<font color="red">*</font></td> <td>计算公式描述<font color="red">*</font></td> </tr> </table> <!---将其设置成按钮的格式,点击的时候执行mytable(str)函数,将当前遍历的值传入函数,便于找到相应的表格,将空白栏添加进去--> <a href="#javascript:;" id="kpi_add${item.value}" name="kpi_add${item.value}" style="display: inline-block;" class="btn_add" type="button" onclick="mytable(${item.value});"></a> </div> </c:forEach> </div> <script> $(function () { $('#myTab li:eq(0) a').tab('show'); }); </script> </div> </div> </div>
add按钮请求的方法 将添加的表格放在相应的列表中
function mytable(str,projectCode){ var lastRow = $("#kpi"+str+" tr").length; //最后一行的长度 var sno = $("#kpi"+str+" tr:last").find("td[name='row_checkbox']").find("input[name='sno']").val()*1+1; var row3 = '<tr name="data_row">'; row3 += '<td name="row_checkbox" height="26px" style="text-align:center"><a class="icon-remove" title="Delete" style="cursor:pointer;"></a><input name="id" type="hidden" value="" /><input name="sno" type="hidden" value="" /></td>'; row3 += '<td name="level"><input type="text" value="" /></td>'; row3 += '<td name="M-1"><input type="text" value="" /></td>'; row3 += '<td name="remark" class="bg_green" style="200px;"><textarea class="bg_green" style="100%;border:0px solid" maxlength="500"></textarea></td>'; row3 += '</tr>'; var objRow = $(row3); if(isNaN(sno)){ //当有些遍历出来的标签其下面没有数据的时,添加新数据第一条的sno将会是NaN这个值,传入后端遍历将会出错,必须判断很重要这一步。 sno=1; } objRow.find("td[name='row_checkbox']").find("input[name='sno']").val(sno); $("#kpi"+str).append(objRow); }
第四步:存入数据传入后台
//注意的是定义变量的时候一定要注意作用域,不然很多都是无效的引入,到处是undefined var data = ${empty data ? "''" : data}; var kpiTabData = data["kpiTabData"]; var kpiData =[]; for(var p=0;p<kpiTabData.length;p++){ $("#kpi"+kpiTabData[p]["value"]).find("tr[name='data_row']").each(function(index,elment){ var obj = {}; obj.id = $(elment).find("td[name='row_checkbox']").find("input[name='id']").val(); obj.sort = $(elment).find("td[name='row_checkbox']").find("input[name='sno']").val(); obj.projectBasicId = projectId; //将对应的kpiTabData[p]["label"]放进去,因为前台的kpiIndType是隐藏的,但是数据库中需要值 obj.kpiIndType = kpiTabData[p]["label"]; obj.kpiIndName = $(elment).find("td[name='level']").find("input").val(); obj.kpiIndRequire = $(elment).find("td[name='M-1']").find("input").val(); obj.remarks = $(elment).find("td[name='remark']").children("textarea").val(); kpiData.push(obj); if($(elment).find("td[name='level']").find("input").val() == '') { oo = $(elment).find("td[name='level']").find("input"); oox = "请输入KPI指标名称!"; isnext = true; return false; } if($(elment).find("td[name='M-1']").find("input").val() == '') { oo = $(elment).find("td[name='M-1']").find("input"); oox = "请输入指标要求!"; isnext = true; return false; } /*if($(elment).find("td[name='remark']").children("textarea").val() == '') { oo = $(elment).find("td[name='remark']").children("textarea"); oox = "请输入计算公式描述!"; isnext = true; return false; }*/ }); } kpiData = JSON.stringify(kpiData); // window.alert("kpiDatas%%%%%"+kpiDatas); if(isnext && kpiData != "[]"){ alert(oox); oo.focus(); return false; } $.post("${ctx}/delivery/platform/saveContractInfoData",{projectId:"${projectInfo.id}",manageData:manageData,serviceData:serviceData,slaData:slaData,kpiData:kpiData},function(result){ if(result=="success"){ if(resultType == '2'){ alert("Save data success!"); window.location.reload(); } }else if(result == "fail"){ if(resultType == '2'){ alert("Save data fail!"); } } }); }else{ if(resultType == '2'){ alert("Please select a project!"); } } }