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

时间:2016-04-22 07:31:40

标签: javascript jquery jqgrid 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 +)中实现这一目标?

2 个答案:

答案 0 :(得分:2)

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

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

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

因此,如果您更改了jqGridRefreshFilterValuespostData.filters个选项,并且您希望立即应用更改,则只需触发search事件:

jqGridRefreshFilterValues

如果在触发事件之前设置了例如$("#grid").triggerHandler("jqGridRefreshFilterValues"); ,则将清除过滤器工具栏的所有字段:

search: false

如果您想清除过滤器并重新加载网格,则可以改用旧的jqGrid方法var $grid = $("#grid"); $grid.jqGrid("getGridParam").search = false; $grid.triggerHandler("jqGridRefreshFilterValues"); (参见the old documentation):

clearToolbar

答案 1 :(得分:0)

我刚刚发现:

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

似乎完美无缺。