2012-01-30 109 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