本篇为明细系列之代码篇作,作者根据其了解和应用过程中,作出的较为完整的说明,较原稿略有删改。若对明细的基本概念还不清楚的,可以结合前面的说明篇一起看。
以下是明细表说明篇的目录,可点击文章底部【阅读原文】跳转至说明篇。
需求来源:在供应商填写的流程里,有一个明细表是为了记录该供应商相关人员的电话号码。这时候我们需要让申请人记得填上仓库、财务、销售等人的电话,这时候我们可以设置默认行,并给默认行,预设内容。
简化需求:明细表2默认需要有三行,且默认行的字段A需要分别设置“财务”“仓库”“销售”字样。
2. 插入如下代码块(因为明细表的默认行,是在页面加载过后才加载的,如果需要改变明细行的值,需要延时)。
$(document).ready(function(){
var _textList = ["财务","仓库","销售"]; //预置条目
for(var i = 0; i < _textList.length; i++){
$("#field11981_" + i).val(_textList[i]);
需求来源:明细表中某列是需要填写类似 111-222-333 的编码,不方便给这列的标题设置“编码(例如111-222-333)”。我们会直接给标题设置为“编码”,然后给明细行的这个字段设置提示文字。
简化需求:给明细表2的每行的字段 编码,设置提示文字,文字内容为“请填写编码,编码格式类似111-222-333”。
$("button[id='$addbutton1$']").click(function(){
var _lastIndex = parseInt($("#indexnum1").val()) - 1;
$("#field11981_" + _lastIndex).attr("placeholder", "请填写编码,编码格式类似111-222-333");
需求来源:录入产品编码时,会需要录入上级编码。如果上级编码只涉及,在本明细表中本次录入。我们可以在某行输入上级编码时,将除了本行外的编码放入本字段的选择区中,以便快速选择。
简化需求:当编辑明细表1的某行的上级编码字段,可以选择其他行的本机编码字段的值。
$(document).ready(function(){
var _detailId = 0; //明细表id,明细表1此值为0
var _inputId = "11985"; //上级编码 id
var _findId = "11988"; //本机编码 id
$("#detailDiv_" + _detailId).delegate("input[id^='field" + _inputId + "_']", "focus", function(){
var _allCount = $("#indexnum" + _detailId).val(); //总行数
for(var i = 0; i < _allCount; i++){
if($("#field" + _findId + "_" + i).length == 0) continue; //元素被删除,则跳过
if($("#field" + _findId + "_" + i).val() == "") continue; //无值,也跳过
if(this.id == ("field" + _inputId + "_" + i)) continue; //本行,跳过
var index = this.id.split("_")[1]; //获得序号
if($("#field" + _inputId + "_" + index + "List").length == 0)
$(this).parent().append("
else $("#field" + _inputId + "_" + index + "List").html(_str);
this.setAttribute("list","field" + _inputId + "_" + index + "List");
简化需求:明细表1的本机编码,值改变时,验证是否符合6位数字,不符合即弹出提示框。
$(document).ready(function(){
$("#detailDiv_0").delegate("input[id^='field11988_']", "change", function(){
var _b = /^[0-9]{6}$/.test($(this).val());
else { alert("请输入6位数的内部码"); $(this).val(""); }
$(document).ready(function(){
checkCustomize = function (){
var _id = "field11993"; //金额id
var _num = document.getElementById("indexnum1").value;
var _ele = $("#"+_id+"_"+(_num-1));
if((_ele.length > 0) && (_ele.val() < 0)){
alert("提醒:请检查金额,金额需大于0");
需求来源:在输入编码的时候,本级编码可能是 编码1-编码2 的格式。
简化需求:让 本级编码 为 编码1-编码2 的格式。
解决过程:其实这个有多种解决方法,js 或者 字段属性。而字段属性更简单一些。给本级编码设置字段属性。
doFieldSQL(" select '$14698$-$14699$' ");
需求来源:办公用品领用流程中,之前节点填写库存数量,而本节点填写领取数量,需限制 <领取数量> 要比 <库存量> 小。
简化需求:修改 领取数量(11993) 值时,验证是否比 库存量(11981) 小。如果不是,则弹出提示。
$(document).ready(function(){
$("#detailDiv_1").delegate("input[id^='field11993_']", "change", function(){
var _thisValue = this.value;
var _otherValue = $(this).parents("tr").eq(0).find("input[id^='field11981_']").val();
if(parseInt(_otherValue) < parseInt(_thisValue)) {
需求来源:团建申请流程,申请人必须填写2个以上活动明细,方可提交。
简化需求:提交时,验证明细表2是否含有两行明细,如果不够,则提示。
$(document).ready(function(){
checkCustomize = function (){
if($("#detailDiv_1 tr[_target='datarow']").length < 2){
需求来源:培训流程,如果确认参加活动(勾选check框),则需要填写感想。
简化需求:申请节点,如果申请人勾选 check(field14700),则展示明细表3,否则隐藏并清空明细表3。
设置明细表3默认不存在空行。
插入如下代码块。
$(document).ready(function(){
$("#detailDiv_" + _index).parents("tr").eq(0).hide(); //默认隐藏明细
document.getElementById("field14700").onchange = function () {
if($(this).is(":checked")) hideDetail();
$("#detailDiv_" + _index).parents("tr").eq(0).show();//展示明细表
$("button[id='$addbutton" + _index + "$']").click();//新增一行
function hideDetail(){console.log(1);
document.getElementById("nodesnum" + _index).value = 0;
document.getElementById("indexnum" + _index).value = 0;
document.getElementById("submitdtlid" + _index).value = "";
document.getElementById("deldtlid" + _index).value = "";
$("#detailDiv_" + _index + " tr[_target='datarow']").remove();
$("#detailDiv_" + _index).parents("tr").eq(0).hide();
简化需求:如果勾选 check(field14700),则展示明细表3中 <感想> 所在列,否则隐藏。
给感想所在列设置class controlHide
$(document).ready(function(){
document.getElementById("field14700").onchange = function () {console.log(1);
if(!$(this).is(":checked")) $(".controlHide").show();
else $(".controlHide").hide();