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 相关文章推荐
在页面上点击任一链接时触发一个事件的代码
Apr 07 Javascript
Javascript的并行运算实现代码
Nov 19 Javascript
js跳转页面方法实现汇总
Feb 11 Javascript
jquerymobile局部渲染的各种刷新方法小结
Mar 05 Javascript
Javascript获取表单名称(name)的方法
Apr 02 Javascript
JavaScript每天必学之数组和对象部分
Sep 17 Javascript
JS动态给对象添加属性和值的实现方法
Oct 21 Javascript
jQuery绑定事件的四种方式介绍
Oct 31 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
May 12 Javascript
vue 父组件中调用子组件函数的方法
Jun 06 Javascript
javascript实现视频弹幕效果(两个版本)
Nov 28 Javascript
探索node之事件循环的实现
Oct 30 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正则的Unknown Modifier错误解决方法
2010/03/02 PHP
php 学习资料零碎东西
2010/12/04 PHP
PHP中file_exists与is_file,is_dir的区别介绍
2012/09/12 PHP
PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍
2013/04/24 PHP
php使用curl存储cookie的示例
2014/03/31 PHP
smarty模板引擎从php中获取数据的方法
2015/01/22 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
2017/03/14 PHP
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
2015/06/10 Javascript
js 递归和定时器的实例解析
2017/02/03 Javascript
Javascript快速实现浏览器系统通知
2017/08/26 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
Nodejs实现文件上传的示例代码
2017/09/26 NodeJs
Vue 使用 Mint UI 实现左滑删除效果CellSwipe
2018/04/27 Javascript
vue2中,根据list的id进入对应的详情页并修改title方法
2018/08/24 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
JS实现指定区域的全屏显示功能示例
2019/04/25 Javascript
vue实现学生信息管理系统
2020/05/30 Javascript
JS pushlet XMLAdapter适配器用法案例解析
2020/10/16 Javascript
[59:15]EG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/29 DOTA
对python list 遍历删除的正确方法详解
2018/06/29 Python
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
2020/05/08 Python
Pytho爬虫中Requests设置请求头Headers的方法
2020/09/22 Python
人事专员职责
2014/02/22 职场文书
教师对学生的寄语
2014/04/03 职场文书
企业新年寄语
2014/04/04 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
上学路上观后感
2015/06/16 职场文书
Python 使用dict实现switch的操作
2021/04/07 Python
详解PHP设计模式之依赖注入模式
2021/05/25 PHP
Spring Boot项目如何优雅实现Excel导入与导出功能
2022/06/10 Java/Android