layui实现table添加行功能 table里有select可选择可编辑 并且与form表单一起提交数据保存_layuitable 可编辑,有下拉框和输入框-CSDN博客

来源: layui实现table添加行功能 table里有select可选择可编辑 并且与form表单一起提交数据保存_layuitable 可编辑,有下拉框和输入框-CSDN博客

这个例子中的下拉框是 可选择 并且 可输入的 还有一个下拉框的点击事件 选择一个值的时候 带出后面几列的值
<%@ page language=”java” import=”java.util.*” pageEncoding=”UTF-8″%>
<%@ include file=”/WEB-INF/page/public/tag.jsp”%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<meta charset=”utf-8″>
<title><jsp:include page=”/WEB-INF/page/public/top_title.jsp”/></title>
<meta name=”renderer” content=”webkit”>
<meta http-equiv=”X-UA-Compatible” content=”IE=edge,chrome=1″>
<meta name=”viewport” content=”width=device-width, initial-scale=1, maximum-scale=1″>
<meta name=”apple-mobile-web-app-status-bar-style” content=”black”>
<meta name=”apple-mobile-web-app-capable” content=”yes”>
<meta name=”format-detection” content=”telephone=no”>
<link rel=”stylesheet” href=”${contextPath}/statics/css/layui.css” media=”all”/>
<style>
        /* 防止下拉框的下拉列表被隐藏—必须设置— 此样式和表格的样式有冲突 如果表格列数太多 会出现错乱的情况 目前我的解决方法是忽略下拉框的美化渲染 <select lay-ignore> */
        .layui-table-cell {
            overflow: visible;
        }
        .layui-table-box {
            overflow: visible;
        }
        .layui-table-body {
            overflow: visible;
        }
        /* 设置下拉框的高度与表格单元相同 */
        td .layui-form-select{
margin-top: -10px;
margin-left: -15px;
margin-right: -15px;
}
    </style>
</head>
<body class=”childrenBody”>
<div  style=”padding:15px;”>
<blockquote class=”layui-elem-quote”>
<span class=”layui-breadcrumb” style=”visibility: visible;”>
<a href=”main.html”>首页</a>
<span lay-separator=””>/</span>
<a href=”${contextPath}/storage/toList”>物料入库</a>
<span lay-separator=””>/</span>
<a><cite>物料入库新增</cite></a> </span>
</blockquote>
<form class=”layui-form” id=”fromId” action=”#”>
  <fieldset class=”layui-elem-field”>
<div style=”padding-top:25px;” class=”layui-field-box”>
  <div class=”layui-form-item”>
<label class=”layui-form-label”>入库单编号</label>
<div class=”layui-input-inline” style=”width:13%”>
  <input type=”text” name=”storagecode” placeholder=”请输入” class=”layui-input” lay-verify=”required”>
</div>
<label class=”layui-form-label”>入库人</label>
<div class=”layui-input-inline” style=”width:13%”>
<input type=”text” name=”storageuser” placeholder=”请输入” class=”layui-input”>
</div>
<label class=”layui-form-label”>仓库</label>
<div class=”layui-input-inline” style=”width:13%”>
<input type=”text” name=”warehouseid” placeholder=”请输入” class=”layui-input”>
</div>
<label class=”layui-form-label”>金额</label>
<div class=”layui-input-inline” style=”width:13%”>
<input type=”text” name=”money” placeholder=”请输入” class=”layui-input”>
</div>
  </div>
  <div class=”layui-form-item”>
    <label class=”layui-form-label”>入库日期</label>
    <div class=”layui-input-inline” style=”width:13%”>
    <input type=”text” name=”storagetime” placeholder=”请选择” class=”layui-input” id=”date”>
    </div>
    <label class=”layui-form-label”>制单人</label>
<div class=”layui-input-inline” style=”width:13%”>
<input type=”text” name=”documentmaker” placeholder=”请输入” class=”layui-input”>
</div>
<label class=”layui-form-label”>供应商</label>
<div class=”layui-input-inline” style=”width:13%”>
<input type=”text” name=”supplier” placeholder=”请输入” class=”layui-input”>
</div>
</div>
</div>
  </fieldset>
  <script type=”text/html” id=”selectTool”>
 <select name=”selectDemo” lay-filter=”selectDemo” lay-search>
<option value=””>请选择或输入</option>
        {{# layui.each(${selectByExample}, function(index, item){ }}
        <option>{{ item.materialcode }}</option>
        {{# }); }}
    </select>
</script>
  <script type=”text/html” id=”toolbarDemo”>
  <div align=”right” class=”layui-btn-container”>
  <button id=”addTable” class=”layui-btn layui-btn-sm layui-btn-normal” lay-event=”add”>添加行</button>
  </div>
</script>
  <script type=”text/html” id=”bar”>
<a class=”layui-btn layui-btn-danger layui-btn-xs” lay-event=”del”>删除</a>
    </script>
<table id=”demo” lay-filter=”tableFilter”></table>
<div class=”layui-form-item”  style=”margin-top: 30px;text-align: center;”>
    <button class=”layui-btn” lay-submit=”” lay-filter=”*”>保存</button>
    <a href=”${contextPath}/storage/toList” class=”layui-btn layui-btn-primary”>返回</a>
</div>
</form>
</div>
<script type=”text/JavaScript” src=”${contextPath}/statics/layui.js”></script>
<script>
layui.use([‘laydate’,’table’,’form’,’JQuery’], function(){
  var table = layui.table,
      form = layui.form,
    laydate = layui.laydate,
    $ = layui.JQuery;
  //时间控件
  laydate.render({
  elem: ‘#date’ //指定元素
  });
  //下拉框监听事件
  form.on(‘select(selectDemo)’, function(data){
//这里是当选择一个下拉选项的时候 把选择的值赋值给表格的当前行的缓存数据 否则提交到后台的时候下拉框的值是空的
var elem = data.othis.parents(‘tr’);
  var dataindex = elem.attr(“data-index”);
  $.each(tabledata,function(index,value){
        if(value.LAY_TABLE_INDEX==dataindex){
        value.materialcode = data.value;
        }
      });
      //这个是根据下拉框选的值 查询后台 带出后面几列的数据并赋值给页面 没有需要的同学忽略掉即可
     if(data.value){ $.ajax({
url:”${contextPath}/storage/toSelect”,
async:true,
type:”post”,
data:{“materialcode”:data.value},
success:function(data){
if(typeof(data) == ‘string’){
data = JSON.parse(data)
}
//给页面赋值
elem.find(“td[data-field=’materialname’]”).children().html(data.data.materialname);
elem.find(“td[data-field=’specifications’]”).children().html(data.data.specifications);
elem.find(“td[data-field=’warehouseid’]”).children().html(data.data.warehouseid);
elem.find(“td[data-field=’warningnumber’]”).children().html(data.data.warningnumber);
elem.find(“td[data-field=’topwarning’]”).children().html(data.data.topwarning);
elem.find(“td[data-field=’unitprice’]”).children().html(data.data.unitprice);
//给表格缓存赋值
$.each(tabledata,function(index,value){
      if(value.LAY_TABLE_INDEX==dataindex){
      value.materialname = data.data.materialname;
      value.specifications = data.data.specifications;
      value.warehouseid = data.data.warehouseid
      value.warningnumber = data.data.warningnumber;
      value.topwarning = data.data.topwarning
      value.unitprice = data.data.unitprice;
      }
     });
}
    });
     }
});
//第一个实例 加载表格
var tableIns = table.render({
 elem: ‘#demo’
 ,toolbar: ‘#toolbarDemo’
 ,defaultToolbar:[]
 ,limit:100
 ,cols: [[ //表头
    {field: ‘materialcode’, title: ‘物料编号’,templet: ‘#selectTool’}
   ,{field: ‘materialname’, title: ‘物料名称’,edit: ‘text’}
   ,{field: ‘number’, title: ‘数量’,edit: ‘text’}
   ,{field: ‘specifications’, title: ‘规格’,edit: ‘text’}
   ,{field: ‘warehouseid’, title: ‘仓库’,edit: ‘text’}
   ,{field: ‘warningnumber’, title: ‘最低库存’,edit: ‘text’}
   ,{field: ‘topwarning’, title: ‘最高库存’,edit: ‘text’}
   ,{field: ‘unitprice’, title: ‘单价’,edit: ‘text’}
   ,{field: ‘subtotal’, title: ‘小计’}
   ,{title: ‘操作’,align:’center’, toolbar: ‘#bar’}
 ]]
,data:[{  “materialcode”: “”
      ,”materialname”: “”
      ,”number”: “”
      ,”specifications”: “”
      ,”warehouseid”: “”
      ,”warningnumber”: “”
      ,”topwarning”: “”
      ,”unitprice”: “”
      ,”subtotal”: “”
    }]
,done: function(res, curr, count){
    //如果是异步请求数据方式,res即为你接口返回的信息。
    //如果是直接赋值的方式,res即为:{data: [], count: 99} data为当前页数据、count为数据总长度
    tabledata = res.data;
    //去掉下拉框的失焦事件 否则在下拉框里输入值 失焦后变回下拉选项里的值了 没有需要的同学忽略掉即可
    $(‘.layui-form-select’).find(‘input’).unbind(“blur”);
    //这里是表格重载的时候 回显下拉框的数据
    $(‘tr’).each(function(e){
    var $cr=$(this);
    var dataindex = $cr.attr(“data-index”);
        $.each(tabledata,function(index,value){
        if(value.LAY_TABLE_INDEX==dataindex){
        $cr.find(‘input’).val(value.materialcode);
        }
       });
      });
        //这里是下拉框输入值改变时触发 给表格缓存赋值 没有需要的同学忽略掉即可
        $(‘.layui-form-select’).find(‘input’).on(“change”,function(e){
        var $cr=$(e.target);
        console.log($cr);
        var dataindex = $cr.parents(‘tr’).attr(“data-index”);
        var selectdata = $cr.val();
            $.each(tabledata,function(index,value){
            if(value.LAY_TABLE_INDEX==dataindex){
            value.materialcode = selectdata;
            }
           });
        });
        //这里是数量的输入事件 计算小计用的 小计 = 数量 X 单价
        var numberelem = $(‘.layui-table-main’).find(“td[data-field=’number’]”);
        var unitpriceelem = $(‘.layui-table-main’).find(“td[data-field=’unitprice’]”);
        numberelem.on(“input”,function(e){
        var $cr=$(e.target);
        var dataindex = $cr.parents(‘tr’).attr(“data-index”);
        var unitprice = $cr.parents(‘tr’).find(“td[data-field=’unitprice’]”).children().html();
        var sub = unitprice*e.target.value;
        $cr.parents(‘tr’).find(“td[data-field=’subtotal’]”).children().html(sub);
        $.each(tabledata,function(index,value){
            if(value.LAY_TABLE_INDEX==dataindex){
            value.subtotal = sub;
            }
           });
        });
        //这里是单价的输入事件 计算小计用的 小计 = 数量 X 单价
        unitpriceelem.on(“input”,function(e){
        var $cr=$(e.target);
        var dataindex = $cr.parents(‘tr’).attr(“data-index”);
        var number = $cr.parents(‘tr’).find(“td[data-field=’number’]”).children().html();
        var sub = number*e.target.value;
        $cr.parents(‘tr’).find(“td[data-field=’subtotal’]”).children().html(sub);
        $.each(tabledata,function(index,value){
            if(value.LAY_TABLE_INDEX==dataindex){
            value.subtotal = sub;
            }
           });
        });
  }
});
var tabledata;
//监听工具条删除按钮
   table.on(‘tool(tableFilter)’, function(obj){
    if(obj.event === ‘del’){
    obj.del();
      };
     }
  );
 //头工具栏添加按钮事件
  table.on(‘toolbar(tableFilter)’, function(obj){
if(obj.event === ‘add’){
tabledata.push({
  “materialcode”: “”
        ,”materialname”: “”
        ,”number”: “”
        ,”specifications”: “”
        ,”warehouseid”: “”
        ,”warningnumber”: “”
    ,”topwarning”: “”
        ,”unitprice”: “”
        ,”subtotal”: “”
          })
      table.reload(‘demo’, {
    data: tabledata
  });
    };
  });
 //提交数据到后台保存
  form.on(‘submit(*)’, function(data){
// console.log(data.elem) //被执行事件的元素DOM对象,一般为button对象
// console.log(data.form) //被执行提交的form对象,一般在存在form标签时才会返回
//  console.log(data.field) //当前容器的全部表单字段,名值对形式:{name: value}
//  console.log(tabledata) //当前容器的全部表单字段,名值对形式:{name: value}
  $.ajax({
url:”${contextPath}/storage/toSave”,
async:true,
type:”post”,
data:$(data.form).serialize()+’&tabledata=’+JSON.stringify(tabledata),
success:function(data){
if(typeof(data) == ‘string’){
data = JSON.parse(data)
}
if(data.code == 0){
layer.msg(data.msg);
window.location.href=”${contextPath}/storage/toList”;
}else{
layer.msg(data.msg);
}
}
      });
  return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。
});
});
</script>
</body>
</html>
————————————————
                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_26814945/article/details/83275765
赞(1) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏