【问题标题】:JqGrid Advanced Search - Save searchJqG​​rid 高级搜索 - 保存搜索
【发布时间】:2012-05-29 16:40:03
【问题描述】:

我正在创建一个网站并在我的页面上有一个 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");
    });
}

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

【问题讨论】:

  • 重置按钮是否重置设置?
  • 我对卸载时发生的异步调用有点警惕。您确定设置总是保存到 cookie 中吗?如果您对“重置”按钮的方法没有任何吸引力,我可能会提出一个激进的想法:每次更改时保存设置,而不仅仅是卸载。
  • 保存设置似乎没有问题。 cookie 始终正确创建,并且网格始终加载保存的搜索。当我单击重置按钮时,似乎什么也没发生。但是,如果我随后离开页面并返回搜索已被重置。所以好像 postData 过滤器被清除了,但搜索窗口和网格实际上并没有刷新。

标签: javascript jquery jqgrid


【解决方案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);
            });
       }
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2011-07-17
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多