【问题标题】:jqGrid clear search criteriajqGrid 清除搜索条件
【发布时间】:2011-04-28 17:38:36
【问题描述】:

目前我设置了一个启用搜索的网格。当我运行搜索时,一切正常,我可以将好的数据返回到网格中。我看到 URL 上的“_search”参数设置为“true”,一切正常。

但是,当完成搜索并且数据不再相关时,我想重新加载网格以显示先前存在的数据(在初始页面加载时显示的数据)。我创建了一个函数来调用“trigger("reloadGrid")”方法,但这只是发送相同的数据,“_search”仍设置为“true”。

有没有办法清除搜索请求数据并重新加载页面加载中显示的初始数据,或者至少将“_search”值设置回“false”以便我可以检查它?目前显示原始数据的唯一方法是重新加载页面。

【问题讨论】:

  • 答案类型取决于您实施的搜索类型。工具栏搜索、单一搜索、高级搜索?

标签: jquery search jqgrid


【解决方案1】:

如果你使用 jqGrid 搜索,会设置以下两件事

  1. jqGrid 的search 参数将设置为true
  2. postData jqGrid 的参数将被修改。 postData 参数的值是一个具有一些属性的对象。在single searching 的情况下,将设置属性searchFieldsearchStringsearchOper。在advanced searching 的情况下,只会设置postData 参数的属性filters。 (属性_search也将被设置,但来自jqGrid的另一个组件,因此对于搜索的重置并不重要。)

所以要重置搜索,您可以为“重置搜索”按钮定义以下事件处理程序:

$("#resetSearch").click(function() {
    var grid = $("#list");
    grid.jqGrid('setGridParam',{search:false});

    var postData = grid.jqGrid('getGridParam','postData');
    $.extend(postData,{filters:""});
    // for singe search you should replace the line with
    // $.extend(postData,{searchField:"",searchString:"",searchOper:""});

    grid.trigger("reloadGrid",[{page:1}]);
});

您可以在the following demo 中看到这一切。在演示中,您应该首先单击导航栏的“搜索”按钮并设置搜索过滤器。然后您可以点击“重置搜索”按钮并重置它。

【讨论】:

  • 感谢您的出色回答。如果我将网格设置为使用 GET 数据而不是 POST,这也可以吗?我曾尝试将 URL 替换为 GET 数据的新 URL,但我发现它只是发送了两次参数。
  • @ackerchez:是的,它适用于 HTTP POST 和 GET。这是postData 的优势。在 GET 的情况下,来自postData 的所有参数都将附加到url。如果当前url 值包含?,则参数将以? 开头。如果不是,那么它将以& 开头。所以一切都非常简单并且工作稳定。
  • 天啊!奥列格你自己实现了jqgrid吗?在每一个帖子上都能找到你!多谢一次。
  • @Paschalis:不,我没有。我在我的项目中只使用了 jqGrid。因为 jQuery 和 jqGrid 对我来说是新的,所以我开始在 stackoverflow 上回答有关该主题的问题,以更好地掌握新知识。后来我写了越来越多的答案并发布在trirand forum许多改进jqGrid的建议。所以我不是 jqGrid 的开发者,我只是一个与他人分享知识并利用开源项目优势的用户。
  • @Paschalis:我自己不使用 PHP,所以我不能给你参考一个好的例子或教程。在示例中,您使用表单编辑并且与服务器的接口的文档是here。您可以使用FiddlerFirebug 等来准确查看将发送到服务器的内容。您应该只在 PHP 代码中使用服务器端的信息。
【解决方案2】:

要清理过滤器窗口(文本和选择)有以下添加(整个功能):

function filtReset() {

    $("#list").jqGrid('setGridParam',{search:false});

    var postData = $("#list").jqGrid('getGridParam','postData');

    $.extend(postData, { filters: "" });

    for (k in postData) {
        if (k == "_search")
            postData._search = false;
        else if ($.inArray(k, ["nd", "sidx", "rows", "sord", "page", "filters"]) < 0) {
            try {
                delete postData[k];
            } catch (e) { }

            $("#gs_" + $.jgrid.jqID(k), $("#list").get(0).grid.hDiv).val("");

        }
    }
    $("#list").trigger("reloadGrid", [{ page: 1}]);
    // for singe search you should replace the line with
    // $.extend(postData,{searchField:"",searchString:"",searchOper:""});
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 2013-07-13
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    相关资源
    最近更新 更多