Easyui笔记2:实现datagrid多行删除的示例代码


Posted in Javascript onJanuary 14, 2017

如何实现datagrid多行删除?

最近在前端界面开发中,使用了datagrid组件。需要完成一个多行勾选并删除的功能。

查看easyui api,其中有一个deleteRow方法,传入要删除行的索引,即可删除该行。

错误做法

于是准备用deleteRow方法和onChecked和onUncheck事件配合使用,来完成多行删除功能。

当用户勾选一行时,触发onChecked事件,将onChecked事件传进来的index索引push到一个全局array中。

当用户取消勾选的时候,触发onUncheck事件,得到onUncheck时间传进来的index索引,用splice方法把array中的该索引值去掉。

这样就能用一个array数组动态记录用户勾选行的索引数组。

然后遍历这个array一行一行deleteRow不就可以了么。

然而实际情况并不是这样,当deleteRow的时候,该行后面的索引值全部向前挪一位。比如,一共有10行(第一行索引为0),我删除了第5行,后面6~9行的索引变成了5~8。这样对于之前记录在array中的索引值就不准确了,会导索引错乱,不能删掉想要删的行。

正确做法:deleteRow,getChecked和getRowIndex配合使用

如果能够将array中记录的index值从小到大排序,然后依次从后向前删除,就能解决行号错乱的问题了。(从后向前删,不会影响到前面行号的索引)。

根据这个思路,其实不用将array排序,利用datagird提供的方法,即可实现这个功能。

这里就不需要onChecked和onUncheck事件了。

用户在点击删除按钮时,首先通过getChecked拿到用户勾选的行的数据数组。

var deletedData = $('#dg').datagrid('getChecked');

然后通过for循环,从最后一行开始向前遍历,每次遍历,用getRowIndex方法得到该行的索引,然后用deleteRow删除该行即可!

for (var i = deletedData.length - 1; i >= 0; i--) {
  var rowIndex = $('#dg').datagrid('getRowIndex', deletedData[i]);
  $('#dg').datagrid('deleteRow', rowIndex);
}

效果展示

Easyui笔记2:实现datagrid多行删除的示例代码 

Easyui笔记2:实现datagrid多行删除的示例代码

html代码:

<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script type="text/javascript" src="easyui_1.5/jquery.min.js"></script>
  <link rel="stylesheet" href="easyui_1.5/themes/icon.css">
  <link rel="stylesheet" href="easyui_1.5/themes/bootstrap/easyui.css">

  <script type="text/javascript" src="easyui_1.5/jquery.easyui.min.js"></script>
  <script type="text/javascript" src="easyui_1.5/locale/easyui-lang-zh_CN.js"></script>

  <script type="text/javascript" src="js/deleteRows.js"></script>
</head>
<body>
<div>
  <table id="dg" toolbar="#tb"></table>
  <div id="tb">
    <a id="delete" class="easyui-linkbutton" iconCls="icon-cancel" plain="true" onclick="deleteRows()">删除</a>
  </div>
</div>
</body>
</html>

js代码:

var dataStr = '{"total": 7, "rows": [{"test": 1}, {"test": 2}, {"test": 3}, {"test": 4}, {"test": 5}, {"test": 6}, {"test":7}]}';
var data = $.parseJSON(dataStr);

$(function () {
  $('#dg').datagrid({
    width: 'auto',
    height: 'auto',
    title: 'datagrid多行删除测试',
    fitColumns: true,
    rownumbers: true,
    columns: [[
      {
        field: 'checkbox',
        checkbox: true,
      },
      {
        field: 'test',
        title: 'test',
        width: '100px',
      }
    ]],
  });

  $('#dg').datagrid('loadData', data);

});

function deleteRows() {
  var deletedData = $('#dg').datagrid('getChecked');
  for (var i = deletedData.length - 1; i >= 0; i--) {
    var rowIndex = $('#dg').datagrid('getRowIndex', deletedData[i]);
    $('#dg').datagrid('deleteRow', rowIndex);
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
两种WEB下的模态对话框 (asp.net或js的分别实现)
Dec 02 Javascript
让textarea自动调整大小的js代码
Apr 12 Javascript
jquery中ajax学习笔记一
Oct 16 Javascript
javascript与jquery中跳出循环的区别总结
Nov 04 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
May 22 Javascript
JavaScript函数详解
Nov 17 Javascript
JavaScript中的标签语句用法分析
Feb 10 Javascript
深入理解javascript中concat方法
Dec 12 Javascript
利用Javascript获取选择文本所在的句子详解
Dec 03 Javascript
微信小程序实现跳转的几种方式总结(推荐)
Apr 24 Javascript
layui2.0使用table+laypage实现真分页
Jul 27 Javascript
JS实现判断移动端PC端功能
Feb 21 Javascript
jQuery实现select模糊查询(反射机制)
Jan 14 #Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
Jan 14 #Javascript
Angular2 PrimeNG分页模块学习
Jan 14 #Javascript
bootstrap datetimepicker日期插件使用方法
Jan 13 #Javascript
详解jQuery事件
Jan 13 #Javascript
js实现固定宽高滑动轮播图效果
Jan 13 #Javascript
JavaScript利用闭包实现模块化
Jan 13 #Javascript
You might like
phpMyadmin 用户权限中英对照
2010/04/02 PHP
在PHP中利用wsdl创建标准webservice的实现代码
2011/12/07 PHP
destoon安装出现Internal Server Error的解决方法
2014/06/21 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
PHP常用字符串函数小结(推荐)
2018/08/05 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
2020/04/26 PHP
js为鼠标添加右击事件防止默认的右击菜单弹出
2013/07/29 Javascript
js整数字符串转换为金额类型数据(示例代码)
2013/12/26 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
详解Vue2 SSR 缓存 Api 数据
2017/11/20 Javascript
vue todo-list组件发布到npm上的方法
2018/04/04 Javascript
JavaScript对象拷贝与赋值操作实例分析
2018/12/10 Javascript
Node.js 进程平滑离场剖析小结
2019/01/24 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
python中的格式化输出用法总结
2016/07/28 Python
Python中应该使用%还是format来格式化字符串
2018/09/25 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
numpy linalg模块的具体使用方法
2019/05/26 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
django中cookiecutter的使用教程
2020/12/03 Python
Tomcat的缺省是多少,怎么修改
2014/04/09 面试题
婚庆公司的创业计划书
2014/01/22 职场文书
八一慰问活动方案
2014/02/07 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
红旗渠导游词
2015/02/09 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书
主婚人致辞精选
2015/07/28 职场文书
幼儿园托班开学寄语(2016秋季)
2015/12/03 职场文书
党组织关系的介绍信模板
2019/06/21 职场文书
创业计划书之农家乐
2019/10/09 职场文书