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 相关文章推荐
国外Lightbox v2.03.3 最新版 下载
Oct 17 Javascript
JS实现QQ图片一闪一闪的效果小例子
Jul 31 Javascript
7个JS基础知识总结
Mar 05 Javascript
jquery实现的树形目录实例
Jun 26 Javascript
全面解析Bootstrap表单使用方法(表单控件)
Nov 24 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
Nov 25 Javascript
javascript断点调试心得分享
Apr 23 Javascript
Js动态设置rem来实现移动端字体的自适应代码
Oct 14 Javascript
node使用UEditor富文本编辑器的方法实例
Jul 11 Javascript
20行JS代码实现粘贴板复制功能
Feb 06 Javascript
详解Vue中的基本语法和常用指令
Jul 23 Javascript
详解vue修改elementUI的分页组件视图没更新问题
Nov 13 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
十天学会php之第五天
2006/10/09 PHP
PHP中实现进程间通讯
2006/10/09 PHP
分享下PHP register_globals 值为on与off的理解
2013/09/26 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
Yii 框架入口脚本示例分析
2020/05/19 PHP
JSON 学习之完全手册 图文
2007/05/29 Javascript
用JTrackBar实现的模拟苹果风格的滚动条
2007/08/06 Javascript
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
JS前端加密算法示例
2016/12/22 Javascript
原生js实现电商侧边导航效果
2017/01/19 Javascript
promise处理多个相互依赖的异步请求(实例讲解)
2017/08/03 Javascript
js使用Promise实现简单的Ajax缓存
2018/11/14 Javascript
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
原生javascript如何实现共享onload事件
2020/07/03 Javascript
Python随机数用法实例详解【基于random模块】
2017/04/18 Python
python 文件操作删除某行的实例
2017/09/04 Python
python判断字符串是否是json格式方法分享
2017/11/07 Python
Django REST framework 视图和路由详解
2019/07/19 Python
详解Django admin高级用法
2019/11/06 Python
python将数组n等分的实例
2019/12/02 Python
C,C++的几个面试题小集
2013/07/13 面试题
Javascript如何发送一个Ajax请求
2015/01/26 面试题
就业自荐书
2013/12/05 职场文书
优秀大学生的自我评价
2014/01/16 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
市场督导岗位职责
2015/04/10 职场文书
征求意见函
2015/06/05 职场文书
理想国读书笔记
2015/06/25 职场文书