【问题标题】:jqGrid - how to reset search options?jqGrid - 如何重置搜索选项?
【发布时间】:2011-04-21 09:41:26
【问题描述】:

使用 jqGrid 多个 searching 如何以编程方式“清除”搜索选项?

“清除”应确保没有 filters 被发送到服务器,并且 GUI 搜索框不包含任何搜索条件..

我们目前正在致电trigger("reloadGrid")。我们想在 reloadGrid 之前调用 clearSearchCrieria() 类型的方法,这样就不会将 filters 传递给服务器或显示在 GUI 搜索框中..

??

【问题讨论】:

    标签: jquery search jqgrid


    【解决方案1】:
    $("#search").filterGrid("#list", {
           gridModel: false,
           enableSearch: true,
           filterbutton: 'search_button',
           enableClear:true,
          filterModel: [{
               label: 'First Name',
               name: 'search',
               stype: 'text'
           }); 
    

    在您的filterGrid 中写上enableClear:true

    【讨论】:

      【解决方案2】:
      $("#resetFilterOptions").click(function(){
              $('input[id*="gs_"]').val("");
              $('select[id*="gs_"]').val("ALL");
              $("#list").jqGrid('setGridParam', { search: false, postData: { "filters": ""} }).trigger("reloadGrid");
              });
      

      这个工作休息搜索选项并重新加载 JQGrid

      【讨论】:

        【解决方案3】:

        我添加了外部刷新按钮来解决这个问题。

        jgrid.jsp

        <sj:submit id="grid_refreshbutton" value=" Refresh" button="true"/>
        

        jgrid.js

        $(document).ready(function(){
        jQuery("#grid_refreshbutton").click(function(){
            var postData = $("#gridtable").jqGrid('getGridParam','postData');
            $("#gridtable").jqGrid('setGridParam',{search:false});    
                $.extend(postData, { filters: "" });
        
                for (k in postData) {
                    if (k == "_search")
                        { postData._search = false;}
                    else if ($.inArray(k, ["nd", "sidx", "rows", "sord", "page", "filters"]) < 0) {
                            delete postData[k];
                           ("#gs_" + $.jgrid.jqID(k), $("#gridtable").get(0).grid.hDiv).val("");
                    }
                }
                       $("#gridtable").trigger("reloadGrid", [{ page: 1}]);         
        

        });

        谢谢/问候, 钦莱

        【讨论】:

          【解决方案4】:

          它将重置所有搜索选项

          $('input[id*="gs_"]').val("");
          

          【讨论】:

          • $(':input[id*="gs_"]').val(""); 进行简单更改将找到所有表单元素,包括选择框。
          【解决方案5】:

          只使用

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

          【讨论】:

            【解决方案6】:

            我能做对的唯一方法 - 我确信它不是正确的方法如下:

            $("#grid").jqGrid('setGridParam', { postData: { filters: null} });
            $("#gs_ColName1").val("");
            $("#gs_ColName2").val("");
            

            ColNameX 是列的名称

            【讨论】:

            • 同意!谢谢!我结合了你的最后两行,清理搜索框和第一行,但另外我触发了重新加载!
            【解决方案7】:

            您可以使用以下方法:

            function clearSearchOptions(){
                $("#list").jqGrid('setGridParam', { search: false, postData: { "filters": ""} }).trigger("reloadGrid");
            }
            

            但正如 Oleg 指出的那样,如果您还希望清除 jqgrid 搜索框,则必须在 jqgrid 定义中使用 recreateFilter:true 选项。

            【讨论】:

            • 谢谢,它对我有用:我无法在 Subgrid 中设置数据,所以我写了 $("#Subgrid").jqGrid('setGridParam', { search: false, postData: { "过滤器": "" } }); $("#Subgrid").setGridParam({ 'data': SubgridData }).trigger('reloadGrid', [{ page: 1 }]);
            • @Jimbo 我不认为 reloadGrid 是强制性的,对我来说它可以在不触发 reloadGrid 的情况下工作。无论如何感谢您的提示。
            【解决方案8】:

            要重置过滤器,您可以直接修改 jqGrid 的postData 参数。您可以使用$("#list").jqGrid('getGridParam','postData')$("#list")[0].p.postData 访问它。如果设置了过滤器,postData 的属性如下所示:

            _search      true           Boolean
            nd           1286296925096  Number
            page         1              Number
            rows         10             Number
            searchField  "id"           String
            searchOper   "lt"           String
            searchString "5"            String
            sidx         "id"           String
            sord         "desc"         String
            

            要重置属性,您可以执行以下操作

            var postdata = $("#list").jqGrid('getGridParam','postData');
            postdata._search = false;
            postdata.searchField = "";
            postdata.searchOper = "";
            postdata.searchString = "";
            

            如果您使用Advanced Searching 而不是Single Searching,您应该清除filters 属性而不是searchFieldsearchOpersearchString

            最后你可以调用$("#list").trigger("reloadGrid",[{page:1}]);重新加载从页码1开始的网格包含。

            【讨论】:

            • 感谢 Oleg - 但这似乎不会重置网格的搜索 UI。也就是说,当您单击导航栏中的搜索按钮时,仍会显示先前的搜索条件。我想清除这些。
            • @Marcus:您询问了如何重置 jqGrid 搜索选项。所以我知道您打开了搜索对话框设置选项,然后关闭了搜索对话框。搜索选项保存在 jqGrid 中。所以我回答了如何重置选项。那你是什么意思?顺便问一下,你使用recreateFilter:true 选项吗?
            • 我们不使用recreateFilter 选项.. 如果我们手动设置postdata,搜索数据会保存在网格中 - 你如何从网格中删除搜索,这样gui就不会显示任何已选择的搜索选项?
            • @Marcus:你能解释一下你的意思是什么场景吗?你为什么决定“搜索数据保存在网格中”?你的意思是?如何重现您的问题以及您希望在 jqGrid 中具有哪种行为?一般来说,网格中有搜索过滤器(作为 postData 的一部分),并且有一个隐藏或显示的搜索对话框。如果您使用recreateFilter:true 选项,对话框将始终是新创建的,而不是显示以前创建的隐藏对话框。
            • 我们在导航栏上有搜索图标。用户可以单击此按钮,搜索多个字段 - 这一切都很好。我们在网格控件之外还有另一个过滤器选项。如果用户选择其他类型的过滤器,我们会更改网格 url 并调用 reloadGrid。但是当我们调用 reloadGrid 时,用户通过网格搜索选择的过滤器选项仍然存在。清除网格搜索条件的最佳方法是什么?
            【解决方案9】:

            点击“重置”按钮试试:

            $(".ui-reset").click();
            

            【讨论】:

            • 会尝试 - 我的帖子可能会有点误导。我要做的是清除搜索选项并致电trigger("reloadGrid")。您的建议可能有效.. 虽然宁愿不直接调用click.. 想调用clearSearchOptions() 方法然后调用trigger("reloadGrid")
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-10-22
            • 2016-12-01
            • 2014-11-14
            • 2014-03-09
            • 1970-01-01
            • 2014-03-10
            • 2014-10-19
            相关资源
            最近更新 更多