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

时间:2012-01-30 15:25:46

标签: jqgrid

我想在用户提交后更改搜索过滤器。通常,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,我不知道为什么我不能将其用于搜索。

1 个答案:

答案 0 :(得分:5)

如果您使用搜索工具栏,则可以使用beforeSearch回调来修改postData.filter。如果是Singe Field搜索或高级搜索,您可以使用onSearch

the answer中,您可以看到如何修改postData.filter

更新:您在测试中做错了什么。唯一的问题是当前的搜索实现没有将this初始化为网格,但是没有在某处明确记录。

我为您创建了the demo,证明您可以在重新开始网格重新编码之前修改过滤器。如果你在网格中搜索等于300的'Client',搜索请求将被修改为'amount'等于300,你会看到结果

enter image description here

相应的代码是

$('#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);
            }
        }});