关于jqgrid多选框无法选中问题解决方案

最近我们组的一个项目在做前端改版,改版过程中选用了jqgrid作为数据显示的表格,插件是我引入的,由于对前端技术不是很熟悉,所以在引入插件时并未对版本做过多稳定行的调查,时间紧迫就引入了5.0.0这个版本。配合bootstrap页面的展现效果还不错,但是随着开发进度的深入发现了问题!就是在设置了表格可以多选时只能通过点击行的方式选择,无法通过点击多选框的形式选中,一般情况下还是可以接受,但是当我们开发另外一个功能时又发现了问题。就是当和jqgrid可编辑单元格同时使用时完全无法点击选择多行了,前提是所有列都是可编辑的!这让开发一度陷入了尴尬的局面。

通过我和同事的研究发现不是不可以点击多选框进行选中,而是执行了两次选中方法,因此我们尝试研究和修改源码,发现很容易改好了一个功能又引发了新的问题,段时间是不可能通过修改源码的方式解决了!

后来我以为同事想到了一个方法,算是一种蹩脚的办法,就是在jqgrid中添加一个事件:beforeSelectRow,也就是在选中行之前触发,对这个方法不了解的可以去查jqgrid文档,这里就不多做介绍了。在这个方法中将选中的行保存为一个变量中,然后手动的给checkbox通过设置属性的方式添加选中状态,最后返回fase.返回false就是不执行之后的选中方法。这种方式虽然能解决问题,但是却不是理想状态,而且在保存选中数据时处理不好的话很容易出错,因此这种方案的代码我就不提供了!

最后我翻阅了文档发现了一个方法就是$('#id').jqGrid('setSelection',rowid);就是手动调用选中行,我把它放在beforeSelectRow方法中并且再返回false,就可以了。具体代码如下:

beforeSelectRow:function(rowid,e){

$('#id').jqGrid('setSelection',rowid);

return false;

}

这样做能完美的解决问题,并且可以通过$('#id').jqGrid('getGridParam','selarrrow');来获取所有选中的行(●°u°●)​ 」。

由于公司没有外网所以我通过手机发的这篇文章,如果对你有所帮助的话我会很高兴的!

你可能感兴趣的:(前端)