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 相关文章推荐
jquery对单选框,多选框,文本框等常见操作小结
Jan 08 Javascript
浅谈bootstrap源码分析之tab(选项卡)
Jun 06 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
Aug 02 Javascript
利用fecha进行JS日期处理
Nov 21 Javascript
vue2 中如何实现动态表单增删改查实例
Jun 09 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
Jul 11 Javascript
基于axios封装fetch方法及调用实例
Feb 05 Javascript
Angular Renderer (渲染器)的具体使用
May 03 Javascript
vue单页开发父子组件传值思路详解
May 18 Javascript
bootstrap table实现iview固定列的效果实例代码详解
Sep 30 Javascript
vue中进行微博分享的实例讲解
Oct 14 Javascript
分享几个JavaScript运算符的使用技巧
Apr 24 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
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
2011/12/01 PHP
php excel reader读取excel内容存入数据库实现代码
2012/12/06 PHP
php中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
php实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
2008/12/19 Javascript
jQuery 常见学习网站与参考书
2009/11/09 Javascript
cnblogs 代码高亮显示后的代码复制问题解决实现代码
2011/12/14 Javascript
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
jquery ui对话框实例代码
2013/05/10 Javascript
javascript的解析执行顺序在各个浏览器中的不同
2014/03/17 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
pace.js页面加载进度条插件
2015/09/29 Javascript
由浅入深讲解Javascript继承机制与simple-inheritance源码分析
2015/12/13 Javascript
JavaScript、jQuery与Ajax的关系
2016/01/24 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
2018/01/15 Javascript
详解vue为什么要求组件模板只能有一个根元素
2019/07/22 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
2019/12/12 Javascript
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
2017/07/06 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
利用Python求阴影部分的面积实例代码
2018/12/05 Python
Python基于class()实现面向对象原理详解
2020/03/26 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
2020/04/30 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
2020/06/29 Python
python用Configobj模块读取配置文件
2020/09/26 Python
localStorage 设置过期时间的方法实现
2018/12/21 HTML / CSS
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
2014年党员承诺书范文
2014/05/20 职场文书
舞蹈专业求职信
2014/06/13 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
三严三实对照检查材料思想汇报
2014/09/28 职场文书
2015国际残疾人日活动总结
2015/03/24 职场文书
从贫穷到富有,是知识技能和学习力的差别
2019/08/20 职场文书
基于Redis过期事件实现订单超时取消
2021/05/08 Redis
python 实现图与图之间的间距调整subplots_adjust
2021/05/21 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python