jqgrid のクライアント側フィルター機能を使用しています。
var opts = {
...
loadonce: true,
...
}
var grid = jQuery("#Grid");
grid.jqGrid(opts)
grid.jqGrid('navGrid','#mpager',{edit:false,
add:false,
del:false}, {}, {}, {},
{
multipleSearch:true,
multipleGroup:true,
recreateFilter: true,
overlay: 0,
tmplNames: ['Not Empty','All','=10kw','fg'],
tmplFilters: populateStaticFilters(),
} );
いくつかのチェックボックスに基づいて、次のようなカスタム フィルターを作成しています。
var filter = { "groupOp": "OR",
"rules": []
}
var rules = {
factive : { "field": "Total", "op": "nn", "data": "" },
fempty : { "field": "Total", "op": "nu", "data": "" },
f10 : { "field": "Power", "op": "eq", "data": "10" },
factivetoday : { "field": "LastUpdate", "op": "eq", "data": today },
}
function jqgselectFilter(myfilter){
grid = jQuery("#Grid");
//console.log(myfilter);
grid[0].p.search = myfilter['rules'].length>0;
jQuery.extend(grid[0].p.postData,{filters:JSON.stringify(myfilter)});
grid.trigger("reloadGrid",[{page:1}]);
}
function populateFilter() {
filter['rules']=[]
if (jQuery('input[name=showactive]').attr('checked')) {
filter['rules'].push(rules['factive']);
}
if (jQuery('input[name=showempty]').attr('checked')) {
filter['rules'].push(rules['fempty']);
}
if (jQuery('input[name=showactivetoday]').attr('checked')) {
filter['rules'].push(rules['factivetoday']);
}
//console.log(filter);
jqgselectFilter(filter);
}
私の問題は、ロード完了時またはグリッド完了時にデフォルトの選択に対応するフィルターを適用できないことです:
grid.jqGrid('setGridParam', { "loadComplete": populateFilter() });
実行を少し遅らせると、すべてが期待どおりに機能します。
setTimeout('populateFilter();',500);
setTimeout を使用せずにこれを達成するにはどうすればよいですか?