jqGrid在提交时更改搜索过滤器

Jay*_*aym 2 jqgrid

我想在用户提交后更改搜索过滤器.通常jqGrid name在colmodel中返回valuefor字段,我想更改特定列的此行为:

我想改变:

{"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,我不知道为什么我不能让它用于搜索.

Ole*_*leg 5

如果使用搜索工具栏,则可以使用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)