这个错误是 easyUI源码的bug,纠结了好多天,尝试了好多方法最后终于解决了,再次分享一下
easyui是根据datagrid-row-index和datagrid-row-r1-x-x来定位行的。
但在deleteRow方法中,删掉当前行后,作者只把当前行后面的行的datagrid-row-index更新了。也就是往前提1,弥补被删除行的空缺,但对datagrid-row-r1-x-x却没做任何改动。
这样就会造成下次执行 opts.finder.getTr的时候,获得的row错误,不是自己点击的row。
解决方法:
在jquery.easyui.min.js 里找到deleteRow方法,
改之后的方法为:
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);
}
直接复制粘贴就可以了
本文详细介绍了EasyUI datagrid组件中的deleteRow方法存在的bug,并提供了具体的修改方案,确保在删除行后能正确更新行标识符,避免后续操作出现定位错误。
1755

被折叠的 条评论
为什么被折叠?



