如果用户有任何不想丢失的选择,我需要允许用户取消jqGrid(版本4.4.1)分页或排序操作。
我最初尝试在beforeRequest
事件处理程序中处理这个问题但是当我调用selarrrow
函数时,总会返回一个空数组,因为选择似乎已被清除。
然后我尝试添加onPaging
和onSorting
事件处理程序,其中选项可通过selarrrow
函数获得,但是,当我从这些函数返回'stop'以取消请求时(如jqGrid documentation中所指定的那样,选择仍然似乎已被清除。请注意,行仍然会在网格中显示,但selarrrow
会返回一个空数组。
我猜这是一个jqGrid缺陷,但是有人知道它是否已在更新的版本中得到修复,或者是否有配置解决方法?
答案 0 :(得分:1)
我认为使用onPaging
时只有一个错误。如果方法返回"stop"
,则选择仍然清除。原因是代码片段中的the lines的顺序
clearVals = function(onpaging){
var ret;
if ($.isFunction(ts.p.onPaging) ) { ret = ts.p.onPaging.call(ts,onpaging); }
ts.p.selrow = null;
if(ts.p.multiselect) {ts.p.selarrrow =[]; setHeadCheckBox( false );}
ts.p.savedRow = [];
if(ret==='stop') {return false;}
return true;
};
正确的代码应该是
clearVals = function(onpaging){
var ret;
if ($.isFunction(ts.p.onPaging) ) { ret = ts.p.onPaging.call(ts,onpaging); }
if(ret==='stop') {return false;}
ts.p.selrow = null;
if(ts.p.multiselect) {ts.p.selarrrow =[]; setHeadCheckBox( false );}
ts.p.savedRow = [];
return true;
};
您可以在2041之后移动版本4.5.2的if(ret==='stop') {return false;}
的{{1}}(对应于版本4.4.1中的第1902行)(版本中的第1898行) 4.4.1)(在jquery.jqGrid.src.js
之后)修复错误。
if ($.isFunction(ts.p.onPaging) ) { ret = ts.p.onPaging.call(ts,onpaging); }
的使用似乎是正确的,如果回调返回onSortCol
字符串,则选择应保持不变。
更新:我发布了相应的芽修复作为拉取请求。它今天合并(见here)到jqGrid的主要代码。因此,下一个版本(> 4.5.2)应该没有您所描述的更多问题。
答案 1 :(得分:0)
这是我为此问题制定的解决方法(请注意:它需要Underscore.js)但是如果有人有一个更清洁的解决方案,则感兴趣:
var tempSelections,
myGrid = $("#mygrid"),
checkSelections = function() {
var selections = myGrid.jqGrid("getGridParam", "selarrrow");
if (selections && selections.length > 0) {
tempSelections = selections;
}
};
myGrid.jqGrid({
... //settings
multiselect: true,
onPaging: checkSelections,
onSortCol: checkSelections,
beforeRequest: function() {
if (tempSelections && tempSelections.length > 0) {
if (!confirm("Do you want to clear the selections on this page?")) {
_.forEach(tempSelections, function(selection) {
myGrid.jqGrid("setSelection", selection);
});
tempSelections = null;
return false;
}
tempSelections = null;
}
return true;
}
});