layui-table表格头工具栏编辑事件(弹子窗口)

layui-table中有两个地方有编辑功能,这两个地方略有不同,但基本原理都是一样的。

image.png

这里我实现的方式是弹出一个子窗口页面,将选中要编辑的数据依此放到子窗口中,进行编辑操作。如下图所示:


image.png

首先给大家展示一下 “行工具事件” 中的 “编辑” 功能代码,然后再演示 “头工具事件”中的 “编辑” 功能代码,大家做下对比。

  //监听行工具事件
  table.on('tool(test)', function(obj){ //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
    var data = obj.data //获得当前行数据(json格式的键值对)
    ,layEvent = obj.event //获得 lay-event 对应的值(编辑、删除、添加)
    ,editList=[]; //存放获取到的那条json数据中的value值(不放key)
    $.each(data,function(name,value) {//循环遍历json数据
        editList.push(value);//将json数据中的value放入数组中(下面的子窗口显示的时候要用到)
    });
    if(layEvent === 'edit'){ 
             //脚本编辑弹出层
               var name = encodeURIComponent(data.toolName);
                 // console.log(data.toolName);
                layer.open({
                   type: 2,
                   title: '编辑学员信息', 
                   shadeClose: true,
                   shade: 0.8,
                   maxmin: true,
                   area: ['70%', '70%'],
                   content: '${pageContext.request.contextPath}/jsp/studentEdit.jsp?toolSceneId='+data.toolSceneId+'&'+'id='+data.id,//设置你要弹出的jsp页面
                   success: function(layero, index){  
                       var body = layer.getChildFrame('body', index);  
                       var iframeWin = window[layero.find('iframe')[0]['name']]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();  
                       var inputList = body.find("input");//获取到子窗口的所有的input标签
                       for (var i = 0; i < inputList.length; i++ ) { 
                          $(inputList[i]).val(editList[i]); //遍历子窗口的input标签,将之前数组中的值一次放入显示
                       }    
                   }   
                });  
     }
   });

studentEdit.jsp中的表单,基本没啥要求,只要除了id字段的其他字段能修改就ok:

<form class="layui-form" action="">

 <div class="layui-form-item">
  <div class="layui-inline">
      <label class="layui-form-label">id</label>
      <div class="layui-input-inline">
        <input name="id" lay-verify="required" readonly="" autocomplete="off" class="layui-input" type="text">
      </div>
    </div>
    <div class="layui-inline">
      <label class="layui-form-label">用户名</label>
      <div class="layui-input-inline">
        <input name="name" lay-verify="required" autocomplete="off" class="layui-input" type="text">
      </div>
    </div>
    <div class="layui-inline">
      <label class="layui-form-label">性别</label>
      <div class="layui-input-inline">
        <input name="sex" lay-verify="required" autocomplete="off" class="layui-input" type="text">
      </div>
    </div>
   
    <div class="layui-inline">
      <label class="layui-form-label">城市</label>
      <div class="layui-input-inline">
        <input name="city" lay-verify="required" autocomplete="off" class="layui-input" type="text">
      </div>
    </div>
    <div class="layui-inline">
      <label class="layui-form-label">邮箱</label>
      <div class="layui-input-inline">
        <input name="email" lay-verify="email" autocomplete="off" class="layui-input" type="text">
      </div>
    </div>
    <div class="layui-inline">
      <label class="layui-form-label">专业 </label>
      <div class="layui-input-inline">
        <input name="major" lay-verify="required" autocomplete="off" class="layui-input" type="text">
      </div>
    </div>
    <div class="layui-inline">
      <label class="layui-form-label">成绩 </label>
      <div class="layui-input-inline">
        <input name="score" lay-verify="required|number" autocomplete="off" class="layui-input" type="text">
      </div>
    </div>
    <div class="layui-inline">
      <label class="layui-form-label">备注 </label>
      <div class="layui-input-inline">
        <input name="sign" lay-verify="required" autocomplete="off" class="layui-input" type="text">
      </div>
    </div>
    <div class="layui-inline">
    <div class="layui-input-block">
      <button class="layui-btn" lay-submit="" lay-filter="editStudent">立即提交</button>
    </div>
  </div>
  </div>
</form>

studentEdit.jsp中的layui提交修改的代码:

<script>
layui.use(['form', 'layedit'] ,function(){
  var $ = layui.jquery
  ,form = layui.form
  ,layer = layui.layer
  ,layedit = layui.layedit; 
  var index = parent.layer.getFrameIndex(window.name); //修改成功的时候点击 确定 会关闭子窗口,这里获取一下子窗口
  form.render();
  //监听提交
  form.on('submit(editStudent)', function(data){ //这块要跟表单中的lay-filter="editStudent"对应
    $.ajax({          
              url: "${pageContext.request.contextPath}/students/editStudent",       
              type: "post",                
              async: false,   //不要让它异步提交
              data: data.field,                  
              dataType: "json",       
              success: function (data) {      
                  if(data.msg!='0'){ 
                      layer.alert("修改成功",{icon: 1,time:2000},function () {
                            layer.close(layer.index); 
                            window.parent.location.reload();    //重新加载父页面,进行数据刷新
                        });   
                    } else{
                        layer.alert("修改失败",{icon: 2,time:2000});
                    }
                }   
            });  
    return false;
  });
   
});
</script>

大概的效果是这样的:


Video_2018-12-03_112507[00-00-00--00-00-30].gif

“头工具事件”中的 “编辑” 功能的layui代码如下:(除了获取行数据的格式那块代码有点不同以外,其他原理都一样)

//监听头工具栏事件
  table.on('toolbar(test)', function(obj){
    var checkStatus = table.checkStatus(obj.config.id)
    ,data = checkStatus.data //获取选中的数据
    ,editList=[]; 
    for(var i=0;i<data.length;i++){ //因为这块获取的是数组,所以当前行数据应该为数组中的第一条,所以要遍历数组
        $.each(data[i],function(name,value) {
        editList.push(value);
    }); }
    //既然获取的是数组,那也可以这样写(去掉for循环,获取下标为0的数据)
    /*
      $.each(data[0],function(name,value) {
          editList.push(value);
      });
    */ 
    switch(obj.event){ 
      case 'update':
        if(data.length === 0){
          layer.msg('请选择一行');
        } else if(data.length > 1){
          layer.msg('只能同时编辑一个');
        } else {
            //脚本编辑弹出层
            var name = encodeURIComponent(data.toolName); 
            layer.open({
               type: 2,
               title: '编辑学员信息', 
               shadeClose: true,
               shade: 0.8,
               maxmin: true,
               area: ['70%', '70%'],
               content: 'studentEdit.jsp?toolSceneId='+data.toolSceneId+'&'+'id='+data.id,
               success: function(layero, index){  
                   var body = layer.getChildFrame('body', index);  
                   var iframeWin = window[layero.find('iframe')[0]['name']]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();  
                   var inputList = body.find("input"); 
                   for (var i = 0; i < inputList.length; i++ ) {  
                      $(inputList[i]).val(editList[i]); 
                   }    
               }   
            });      
        }
      break;
 }); 

功能的实现都写在代码注释中了,大家仔细研究代码就可以了。
layui的学习,还是要多看文档多实践的,希望对大家有所帮助。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容