我想在用户提交后更改搜索过滤器.通常jqGrid name
在colmodel中返回value
for字段,我想更改特定列的此行为:
我想改变:
{"groupOp":"AND","rules":[{"field":"available","op":"eq","data":"true"}]}
Run Code Online (Sandbox Code Playgroud)
至
{"groupOp":"AND","rules":[{"field":"s.trait.available","op":"eq","data":"true"}]}
Run Code Online (Sandbox Code Playgroud)
我试图通过以下方式改变提交的表格; 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
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法适用于editOptions和delOptions,我不知道为什么我不能让它用于搜索.
如果使用搜索工具栏,则可以使用beforeSearch回调来修改postData.filter
.在Singe Field搜索或高级搜索的情况下,您可以使用onSearch.
在答案中,您可以看到如何postData.filter
修改.
更新:你在测试中做错了什么.唯一的问题是当前的搜索实现没有初始化this
到网格,但它没有在某处明确记录.
我为您创建了演示,演示了您可以在重新开始网格重新编码之前修改过滤器.如果您要在网格中搜索等于300的"客户端",搜索请求将被修改为"金额"等于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);
}
}});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7993 次 |
最近记录: |