如何在较新版本的 free-jqgrid 中重置搜索工具栏和搜索过滤器?

how to reset the search toolbar and search filters in newer versions of free-jqgrid?

对于 free-jqgrid 的旧版本,我使用了一个功能来重置搜索工具栏和过滤器:

function resetSearchToolbar()
{
    var col_arr = $("#grid").jqGrid("getGridParam", "colModel");
    var toolbar_selector;

    for(var i = 0, max = col_arr.length; i < max; i++)
    {
        if(col_arr[i].search && $("#gs_" + col_arr[i].name).val().length)
        {
            toolbar_selector = $("#gs_" + col_arr[i].name)
            toolbar_selector.val("");
        }
    }

    // trigger toolbar searching with key-event:
    if(typeof toolbar_selector !== "undefined")
        toolbar_selector.trigger("keydown");
}

这是一个非常糟糕的黑客攻击 - 但它对我有用。

在较新版本的 free-jqgrid (4.13+) 中是否有更好的方法来实现此目的?

我刚刚发现:

$("#grid").setGridParam({ postData: { filters: {}} }).trigger("reloadGrid");

看起来很完美。

免费 jqGrid 4.13.0 实现了新功能:根据当前搜索的过滤器填充过滤器工具栏 postData.filters 以防真正应用过滤器(search:true 选项在 jqGrid 中设置)。如果您不想拥有该功能,可以使用 filterToolbarloadFilterDefaults: true 选项。

该功能在某些测试用例中存在一些小错误,但 4.13.2 版本应该已修复所有问题。

免费的 jqGrid 支持 jqGridRefreshFilterValues 事件,可以触发该事件以强制重新加载过滤器(无需重新加载网格)。在重新加载网格时,过滤器将被重新加载。

因此,如果您更改了 postData.filterssearch 选项并且您希望立即应用更改,那么您只需触发 jqGridRefreshFilterValues 事件:

$("#grid").triggerHandler("jqGridRefreshFilterValues");

例如,如果您在触发事件之前设置 search: false,则过滤器工具栏的所有字段都将被清除:

var $grid = $("#grid");
$grid.jqGrid("getGridParam").search = false;
$grid.triggerHandler("jqGridRefreshFilterValues");

如果您想清除过滤器 并重新加载网格 那么您可以使用旧的 jqGrid 方法 clearToolbar (参见 the old documentation):

$("#grid")[0].clearToolbar();