0

我正在创建一个网站并在我的页面上有一个 jqGrid。我通过向调用 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");
    });
}

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

4

1 回答 1

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);
            });
       }
    });
}
于 2012-05-30T11:08:14.397 回答