2012-01-30 115 views
1

我想在用户提交后更改搜索过滤器。通常的jqGrid在colmodel为value现场返回name,我想改变这种行为的特定列:jqGrid更改提交搜索过滤器

我想改变:

{"groupOp":"AND","rules":[{"field":"available","op":"eq","data":"true"}]} 

{"groupOp":"AND","rules":[{"field":"s.trait.available","op":"eq","data":"true"}]} 

我尝试通过以下方式更改提交的表单;萤火虫显示功能从未被调用。

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,我不知道为什么我不能让它工作搜索。

回答

4

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

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

已更新:您在测试中做了错误。唯一的问题是目前的搜索实现不会初始化this到网格,但它没有明确记录在某处。

我为您创建了the demo,它证明您可以在网格的重新启动开始之前修改过滤器。如果你想在网格中的“客户”等于300的搜索请求将被修改为“量”等于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); 
      } 
     }}); 
+0

firebug显示onSearch现在正在用户完成搜索后被捕获。但postdata似乎没有定义。 'this'包含'odata []'和其他关于表单的信息,但不显示用户提交的数据。 – Jaym 2012-01-30 17:47:13

+0

@Jaym:你犯了一些错误。我修改了我的答案,并包含了演示如何实现'onSearch'内搜索过滤器修改的演示。 – Oleg 2012-01-30 18:18:25

+0

非常感谢!我看到我做错了,并成功地编辑了js。你的回答总是非常有帮助 – Jaym 2012-01-30 18:42:46