項目需求,jqgrid多選操作,翻頁的時候要記住之前的操作
在網上找到了網友提供的方法:
gridComplete : function() { removeHorizontalScrollBar("list"); var _this = this; //console.log(item_selected); if(item_selected.length>0){ for (var i = 0; i < item_selected.length; i++) { $(_this).jqGrid('setSelection',item_selected[i]); } } }, beforeSelectRow:function(rowid, e) { var _this = this; var index = _.indexOf(item_selected, rowid); if(index==-1){ item_selected.push(rowid); } else{ item_selected = _.pull(item_selected, rowid); } return true; }, onSelectAll:function(aRowids,status) { var _this = this; if(status){ item_selected = _.union(item_selected, aRowids); }else{ item_selected = _.difference(item_selected, aRowids); } },
(注意,下划線對象的方法采用的是lodash.3.17.js)
這樣翻頁的時候會記住選中行
但是一開始的時候我沒有加紅色背景的return true 代碼,發現不點擊checkbox,而只是點擊該行,雖然實際上已經選中了,jqgrid getselectRow 方法也能得到選中行,但是checkbox卻沒有顯示勾選上的狀態,而正常情況下jqgrid默認的操作會選中該行,並改變checkbox的勾選狀態。
在解決問題的過程中,想到只在鼠標點擊checkbox的時候才設置item_selected數組值,使用multiboxonly:true參數,發現不起作用,據說是3.6版本之后不支持了,后來找到網友的一篇文章,解決代碼如下:
beforeSelectRow : function(rowid, e) { var $myGrid = $(this), i = $.jgrid.getCellIndex($(e.target) .closest('td')[0]), cm = $myGrid.jqGrid( 'getGridParam', 'colModel'); if (cm[i].name === 'cb') { var index = _.indexOf(item_selected, rowid); if (index == -1) { item_selected.push(rowid); } else { item_selected = _.pull(item_selected, rowid); } } },
但是在點擊全選的時候,卻依然不能正常設置item_selected的值,后來還是加了return true 才解決
參考地址:
https://blog.csdn.net/deepwishly/article/details/8109753