easyui datagrid deleteRow(删除行)的BUG!
转自:http://my.oschina.net/fants/blog/77189
项目中又用到easyui 的datagrid做数据展示。功能很强大,很实用,但bug也很多。今天这个就够让人头疼。

如图,现在有个删除功能,选中一行,点击就可以删除。
easyui datagrid 提供了deleteRow方法。可以实现删除。
但还是出问题了。

第一次删除后,就会出现,点击一行,但是界面上选择的却是他上面那一行。百思不得其解。
google,baidu,各种搜索,得到的答案都是删除后,然后reload。重新加载数据。
我不想这样做也不可能用户一删除就要重新加载。并且第二次删除的话,行号也跟着乱的一塌糊涂。
这明显又是easyui的bug,于是开始一步步跟踪调试easyui所谓的开源代码(被混淆过)。
一下午的调试发现,easyui是根据datagrid-row-index和datagrid-row-r1-x-x来定位行的。
但在deleteRow方法中,删掉当前行后,作者只把当前行后面的行的datagrid-row-index更新了。也就是往前提1,弥补被删除行的空缺,但对datagrid-row-r1-x-x却没做任何改动。
这样就会造成下次执行 opts.finder.getTr的时候,获得的row错误,不是自己点击的row。造成上面所提的错误。
于是:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
deleteRow: function(target, index) { var opts = $.data(target, "datagrid").options; var data = $.data(target, "datagrid").data; opts.finder.getTr(target, index).remove(); var gd = $.data(target, "datagrid"); for (var i = index + 1; i < data.rows.length; i++) { opts.finder.getTr(target, i, "body", 2).attr("datagrid-row-index", i - 1) .attr("id",gd.rowIdPrefix+"-2-"+(i-1)); var tr1 = opts.finder.getTr(target, i, "body", 1).attr("datagrid-row-index", i - 1) .attr("id",gd.rowIdPrefix+"-1-"+(i-1)); if (opts.rownumbers) { tr1.find("div.datagrid-cell-rownumber").html(i); } } data.total -= 1; data.rows.splice(index, 1);}, |
这是改进后的代码,第5行是我加的。
|
1
|
.attr("id",gd.rowIdPrefix+"-2-"+(i-1)); |
|
1
|
.attr("id",gd.rowIdPrefix+"-1-"+(i-1)); |
这个两行同时去设置他对应的datagrid-row-rx-x-x
这样两个标识就同步了。

哈哈,看上去多整齐,再看看没修改前:

好,到此这个bug就完美解决了。
easyui datagrid deleteRow(删除行)的BUG!的更多相关文章
- easyui datagrid deleteRow(删除行)的BUG
有时候想临时保存一些数据,等确定好后在批量一次提交,但EasyUI datagrid 用的时候添加可以正常,如果从中间删除那行号就全乱了.导致删除的时候有可能删除上一行数据. function ad ...
- easyui datagrid 遇到的坑 cannot read property ·· pageNum bug and so on
1 本人刚刚接到一个bug,就是初始化时若设置了datagrid到指定页数,点击下一页显示不对,4 --> ‘4’+1=41的字符串形式,再点击超出页码范围直接到最后一页: 原因:因为 page ...
- 学习日记6、easyui datagrid 新增一行,编辑行,结束编辑和删除行操作记录
1.新增一行并进入编辑状态 var index=$('#Numbers').datagrid('appendRow', { CardInformation: '开户行', CardNumber: '银 ...
- jquery easyui DataGrid
Easyui Demo网站: http://www.jeasyui.com/ 英文 http://www.phptogether.com/juidoc/ 中文 datagrip的基本属性方法:ht ...
- easyui DatagrId 的实例讲解
下面是代码实现 @{ ViewBag.Title = "人员查找"; ViewBag.LeftWidth = "200px"; ViewBag ...
- 关于EasyUI DataGrid行编辑时嵌入时间控件
本人做一个名为“安徽中控”项目时,为快速开发基础数据增删改模块,遂采用EasyUIDatagrid将所有增删改查的操作都集中于表格中,并且所有增删改查操作都集中于泛型对象,从而不必为每个表写具体的增删 ...
- easyui datagrid 没数据时显示滚动条的解决方法
今天解决了一个bug,因为datagrid有多列,可是当没有数据的时候,后面的列无法通过滚动条拉动来显示,比较麻烦,而需求要求没有数据也要拉动滚动条查看后面有什么列,一开始在网上找了一些资料,发现都不 ...
- EasyUI datagrid 行编辑
一.HTML: <div class="info"> <div class="info_tt"> <span class=&quo ...
- easyui datagrid中datetime字段的显示和增删改查问题
datagrid中datetime字段的异常显示: 使用过easyui datagrid的应该都知道,如果数据库中的字段是datetime类型,绑定在datagrid显式的时候会不正常显示,一般需要借 ...
随机推荐
- Namenode写Journalnode超时,导致Namenode挂掉的问题
昨天还好好的集群,今天早上来看又挂掉了,还好是家里的测试服务器集群... 首先,查看了Namenode的状态,发现两台Namenode只剩下一台了,赶紧到挂了的那台去查看了logs下的日志: -- : ...
- 一个简单的jQuery插件开发实例
两年前写的一个简单的jQuery插件开发实例,还是可以看看的: <script type="text/javascript" src="jquery-1.7.2.m ...
- Linux的cron和crontab
一 cron crond位于/etc/rc.d/init.d/crond 或 /etc/init.d 或 /etc/rc.d /rc5.d/S90crond,最总引用/var/lock/subsys/ ...
- Sass入门:第二章
1.Sass语法格式 假设有这样一段CSS代码: body{ font : 100% Helvetica , sans-serif; color : #333; } Sass最初的语法格式 $font ...
- aws部署从无到有
第一次进入aws控制台的时候傻眼了,密密麻麻的菜单都不知道该选哪一个.无从下手 查了好久才找到,就从EC2入手吧,点击后EC2后进入下面页面 点击启动实例,这个页面就亲切多了.不在像看天书了. 本人最 ...
- 浙大pat 1035题解
1035. Password (20) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To prepare f ...
- Worker+MQ解惑
用Worker来保证数据的一致性,再加上MQ来便于水平扩展,也提升了Worker的效率.这就是传说中的Worker+MQ,又叫做可靠消息方式.另外,将任务的查询和执行分工,形成父子任务,达到真正的分布 ...
- 一步一步学EF系列 【7、结合IOC ,Repository,UnitOfWork来完成框架的搭建】
前言 距离上一篇已经有段时间了,最近这段时间赶上新项目开发,一直没有时间来写.之前的几篇文章,主要把EF的基础都讲了一遍,这批文章就来个实战篇. 个人在学习过程中参考博客: Entity Framew ...
- C#正则分组实例
static void Main(string[] args) { string str = "大家家家家家家家明天天天天天天天天玩得得得得得得得开心"; Regex reg = ...
- 朋友遇到过的t厂面试题
朋友遇到过的t面试题 leetcode160 找链表交点 leetcode206 反转链表