我想在用户提交后更改搜索过滤器。通常,jqGrid在colmodel中返回name
作为字段的value
,我想更改特定列的此行为:
我想改变:
{"groupOp":"AND","rules":[{"field":"available","op":"eq","data":"true"}]}
到
{"groupOp":"AND","rules":[{"field":"s.trait.available","op":"eq","data":"true"}]}
我尝试通过以下方式更改提交的表单; firebug表明函数永远不会被调用。
var searchOptions = {
multipleSearch:true, multipleGroup:false, closeOnEscape:true, closeAfterSearch:true,
sopt:['ge', 'eq', 'le'],
beforeSubmit:function (params, postdata) {
//alterations would be here
}
,
onclickSubmit:function (params, postdata) {
//alterations would be here
}
}
这种方法适用于editOptions和delOptions,我不知道为什么我不能将其用于搜索。
答案 0 :(得分:5)
如果您使用搜索工具栏,则可以使用beforeSearch回调来修改postData.filter
。如果是Singe Field搜索或高级搜索,您可以使用onSearch。
在the answer中,您可以看到如何修改postData.filter
。
更新:您在测试中做错了什么。唯一的问题是当前的搜索实现没有将this
初始化为网格,但是没有在某处明确记录。
我为您创建了the demo,证明您可以在重新开始网格重新编码之前修改过滤器。如果你在网格中搜索等于300的'Client',搜索请求将被修改为'amount'等于300,你会看到结果
相应的代码是
$('#list').jqGrid('navGrid', '#pager', {add: false, edit: false, del: false}, {}, {}, {},
{
multipleSearch: true,
overlay: 0,
onSearch: function () {
var i, l, rules, rule, $grid = $('#list'),
postData = $grid.jqGrid('getGridParam', 'postData'),
filters = $.parseJSON(postData.filters);
if (filters && typeof filters.rules !== 'undefined' && filters.rules.length > 0) {
rules = filters.rules;
for (i = 0; i < rules.length; i++) {
rule = rules[i];
if (rule.field === 'name') {
// make modifications only for the 'contains' operation
rule.field = 'amount';
}
}
postData.filters = JSON.stringify(filters);
}
}});