2010-04-08 64 views
6

我有一個導航條,有search: truemultipleSearch: true的jqGrid。我想向我的用戶界面添加一個按鈕,該按鈕會自動爲搜索添加一條附加規則。如何操作jqGrid的搜索/過濾器?

我試着直接操作過濾器的postData,但是這種方式添加的值不會顯示在搜索UI中。

我也試過直接訪問使用jQuery,像這樣的搜索框:

$('#fbox_list').searchFilter().add(); 
$('#fbox_list .sf .data input').each(function(index) { 
    alert($(this).val()); 
}); 

但是,除了感覺hackish的,如果用戶已經點擊了搜索按鈕,它只能(在fbox_list div不是在加載時構建的)。

有沒有其他人處理過這樣的問題?

回答

7

爲了子孫後代,這裏是我目前使用的黑客。網格有list ID和尋呼機的pager的ID:

jQuery(document).ready(function() { 
    //Initialize grid. 

    //Initialize the navigation bar (#pager) 

    //Hack to force creation of the search grid. 
    //The filter's ID is of the form #fbox_<gridId> 
    jQuery('#pager .ui-icon-search').click(); 
    jQuery('#fbox_list').searchFilter().close(); 

    //Example button events for adding/clearing the filter. 
    jQuery("#btnAddFilter").click(function() { 
     //Adds a filter for the first column being equal to 'filterValue'. 
     var postFilters = jQuery("#list").jqGrid('getGridParam', 'postData').filters; 
     if (postFilters) { 
      $('#fbox_list').searchFilter().add(); 
     } 

     var colModel = jQuery("#list").jqGrid('getGridParam', 'colModel'); 
     //The index into the colModel array for the column we wish to filter. 
     var colNum = 0; 
     var col = colModel[colNum]; 

     $('#fbox_list .sf .fields select').last().val(col.index).change(); 
     $('#fbox_list .sf .data input').last().val('filterValue'); 

     $('#fbox_list .sf .ops select.field' + colNum).last().val('eq').change(); 

     $('#fbox_list').searchFilter().search(); 
    }); 

    jQuery("#btnClearFilter").click(function() { 
     $('#fbox_list').searchFilter().reset(); 
    }); 
}); 
+0

非常感謝你這篇文章。我一直在試圖找到一種方法來訪問網格更新時的XHR URI。但是,由於XHR權限問題,我無法在本地主機開發框中完成此操作。你提到的「jqGrid('getGridParam','postData')」給了我一種自己生成URI的方法。再次感謝。 – Justin 2011-03-23 22:24:14

+0

是不是有一個更簡單的方法? – Don 2011-04-18 07:42:49

+0

@Don我發佈了這個問題,希望有人提供一個。到目前爲止,我還沒有看到一個工作。當然,我已經離開了jqGrid場景了一段時間,所以可能已經補丁了。 – AaronSieb 2011-04-18 13:09:53

0

如果你指的是過濾器工具欄,你可以這樣做:(狀態爲山坳名字 - 所以,將「#gs_status」瓦特/ 「#gs_」 + your_col_name

 jQuery("#distributor_grid").jqGrid('showCol',['status']);   
     jQuery(".ui-search-toolbar #gs_status") 
      .val('ALL') 
      ; 

     $('#distributor_grid').RefreshData(); // triggers toolbar 

+0

嗯......也許我們有一個版本不匹配。當我嘗試'$('#

').RefreshData();',我收到JS錯誤(方法不存在)。無論哪種方式,我將如何使用此方法設置搜索運算符(等於,不等於等)? – AaronSieb2011-01-06 14:14:49

0

清除輸入,選擇和復位柵

$("td#refresh_navGrid").click();