JqG​​rid高级搜索 - 保存搜索

时间:2012-05-29 16:40:03

标签: javascript jquery jqgrid

我正在创建一个网站,并在我的页面上有一个jqGrid。我通过向我的navgrid(寻呼机)添加一个调用jqGrid'searchGrid'函数的自定义按钮来使用高级搜索功能。

$('#My_Grid_Id').jqGrid(settingsObject)
.navGrid('My_Grid_Id_toolbar1',{del:false,add:false,edit:false,refresh:false,search:false})
 .navButtonAdd('My_Grid_Id_toolbar1', 
 { 
    caption: 'Search', 
    buttonicon: 'ui-icon-search', 
    title: 'Search', 
    onClickButton: function() { 
        $(gridSelector).jqGrid ('searchGrid', {
            caption: 'Search',
            multipleSearch:true, 
            overlay: false,
            multipleGroup:true,
            recreateFilter: true
         });
     } 
});

我希望能够在用户离开页面时保存搜索设置,以便在用户返回时重新加载它们。我几乎有一个可行的解决方案,但在我保存并重新加载搜索设置后,搜索对话框窗口上的“重置”按钮无法正常工作。搜索设置似乎在后台重置,但窗口不刷新,网格仍显示旧结果。

再解释一下。我抓住窗口卸载事件并通过使用ajax调用将potdata.filters参数发送到服务器来存储搜索设置。然后我将数据存储在cookie中,以后可以加载。

$(window).unload( function () {
    $.ajax({
        type: "POST",
        url: saveUrl,
        dataType: 'json',
        traditional: true,
        async: false,
        data: { 
            searchSettings: $('#My_Grid_Id').getGridParam('postData').filters       
        }
    });
});

当我重新加载网格时,我会检查我的cookie是否有值,然后将保存的过滤器插回到构造函数的网格中。

postData: { 
    filters: mySavedSearchSettings                  
},

此时网格运行良好,搜索已保存,结果显示为预期。当我打开搜索窗口对话框时,搜索选项将按预期显示。但是当我单击“重置”按钮时,窗口没有正确更新,网格也没有结果。我试图将一个onclick事件添加到重置按钮以手动重置搜索,但似乎没有任何事情发生。

afterShowSearch: function() {
    $('.fm-button-icon-left').click(function(){
        $('#My_Grid_Id').jqGrid('setGridParam', { search: false, postData: { "filters": ""} }).trigger("reloadGrid");
    });
}

任何人都可以提供任何帮助吗?我想我很接近,我只需要以某种方式重置搜索窗口然后重新加载网格。

1 个答案:

答案 0 :(得分:1)

答案结果是两件事。

首先,网格没有重新加载正确的数据,因为我没有正确处理服务器端代码。我最近开始使用PHP,我有一个错误,代码没有正确识别过滤器发布数据为空/空。

其次,我可以通过调用'searchGrid'函数重新打开它来重置搜索窗口对话框。因此,在显示搜索后,我将点击事件添加到重置按钮,如下所示: -

$(gridSelector).navButtonAdd(gridSelector + '_toolbar1', 
    { 
        caption: 'Search', 
        buttonicon: 'ui-icon-search', 
        title: 'Search', 
        onClickButton: function() { OpenAdvancedSearchDialog(gridSelector); } 
    });
}

function OpenAdvancedSearchDialog(gridSelector) {
    $(gridSelector).jqGrid ('searchGrid', {
        caption: 'Search',
        multipleSearch:true, 
        overlay: false,
        multipleGroup:true,
        recreateFilter: true,
        afterShowSearch: function() {
            $('.fm-button-icon-left').click(function(){
                OpenAdvancedSearchDialog(gridSelector);
            });
       }
    });
}