在使用easyui的datagrid时有以下操作,在行右键事件onRowContextMenu里,每次右键获取选中的行 getSelections 对其进行操作,可是出现第一次加载时右键能取到选中行,之后的右键通过getSelections都获取不到选中行,页面的选中状态还在,通过查看easyUI源发发现以下代码:
getSelections:function(jq){
return _7e2(jq[0]);
}
function _7e2(_7e3){
var _7e4=$.data(_7e3,"datagrid");
var opts=_7e4.options;
var data=_7e4.data;
if(opts.idField){
return _7e4.selectedRows;
}else{
var rows=[];
opts.finder.getTr(_7e3,"","selected",2).each(function(){
rows.push(opts.finder.getRow(_7e3,$(this)));
});
return rows;
}
};
怀疑是idField影响了获取选中行,把if(opts.idField)判断去掉确实能取到行,但感觉不是最好的解决办法,也不知道哪里影响到了selectedRows里的数据,请问有解决的办法么????
以下是声明datagrid的代码:
fit: true,
fitColumns: true,
view: scrollview,
singleSelect: false,
border: false,
autoRowHeight: true,
remoteSort: false,
idField: 'vehicleId',
ctrlSelect: true,
pageSize: 30,
easyui有些版本的源码确实是存在问题的,所以你改了源码没有产生其他问题是可以的。我前段时间也遇到过类似的问题,我当时就是改了好几处源码才解决的。
if(opts.idField)判断去掉就是有问题,在按shift建进行全选的时候,getSelections获取到的数据是错的,你具体改了哪些?
@扯。: 我遇到的问题跟你的不一样,你要全选可以直接在列表头上加一个全选实现啊,为什么还要shift那么麻烦呢
@record_world: 表头加全选又会引发另一个问题,我是用 view: scrollview进行分页,点全选只能选中当前页
@扯。: 你要想全部选中可以把这个全选当做一个参数传到后台去处理呀,而且就算你不改idfield,貌似全选也只是当前页面显示的行项目吧
@record_world: 问题解决了,不是easyUI的问题,是我把selectRows这个对象赋值给了另一个对象A,我用完A之后就把它清空了,导致selectRows也被清空了,还是感谢你的回答。
问题解决了,不是easyUI的问题,是我把selectRows这个对象赋值给了另一个对象A,我用完A之后就把它清空了,导致selectRows也被清空了,还是感谢你的回答。
问题已解决,不是easyui的问题,是我自己其他部分代码的问题
– 扯。 5年前