jquery - jqGrid高级搜索 'beforeSearch'选项?

标签 jquery jqgrid

我正在使用最优秀的jqGrid插件,并且通过搜索在这个网站上找到了很多帮助,但是我发现了一个我无法解决的问题,或者找到了解决方案。这将是我在这里发表的第一篇文章。

我正在使用过滤器工具栏对我的网格进行一些搜索。由于我需要与之交互的后端的性质,我无法使用 jqGrid 提供的过滤器,而是需要在提交之前拦截搜索并修改 postdata。我使用过滤器工具栏选项“beforeSearch”来执行此操作,如下所示:

$("#SC_grid").jqGrid('filterToolbar', {stringResult: true, searchOnEnter: true, defaultSearch : "cn", beforeSearch: function() {
            var postData = $("#SC_grid").jqGrid('getGridParam','postData');
            var newPostData = '1=1';
            var searchData = jQuery.parseJSON(postData.filters);
            for (var iRule=0; iRule<searchData.rules.length; iRule++) {
                newPostData = newPostData + " AND " + searchData.rules[iRule].field + " LIKE '%" + searchData.rules[iRule].data + "%' ";
            }
            $("#SC_grid").jqGrid('setGridParam',{postData: { filter: newPostData, filters: ''} } );
            return false;
}});

这对我在提交之前构建我的选择的一部分非常有用。 我也想以同样的方式使用高级搜索,但无法弄清楚如何在提交之前拦截 POST。似乎没有 beforeSearch() 选项可用,并且 afterShowSearch 或 onClose 选项没有正确的计时。关于如何继续的任何建议?

标记

最佳答案

你是对的,jqGrid当前的高级搜索实现没有像beforeSearch这样的事件。新版本的高级搜索是全新编写的,将有onSearch方法供您使用。像 beforeSearch 这样的方法将在 trigger("reloadGrid",[{page:1}]) 之前触发,但在 postData 之后将被触发已满。

filterToolbarbeforeSearch 有一个更有趣的功能,因此您可以通过从 返回 true 值来停止搜索在搜索之前。所以beforeSearch可以起到验证的作用。

在我的old answer中我描述了一种通用方法,可用于任何类型的验证postData修改。在答案中,我展示了如何对 jqGrid 的 reloadGrid 事件处理程序进行子类化,并在需要时停止重新加载网格。 The demo显示这一点。以同样的方式,人们可以对数据进行任何其他修改。很遗憾,但是the answer索引会很差,并且不喜欢在 stackoverflow 上进行最多的搜索。所以没人知道。

在您的情况下,您只需要在提交之前修改帖子数据,并且不需要停止网格重新加载。因此,您可以使用至少两个标准 jqGrid 事件来解决问题: beforeRequestserializeGridData 。在两者中,您都可以访问 search (作为 this.p.search)和 postData (作为 this.p.postData) 参数。如果使用任何搜索/过滤方法,search 参数的值将以 _search 形式发送到服务器,并将设置为 true。因此,您可以在事件处理程序的内部修改 this.p.postData

serializeGridData 内部您甚至有一种方法可以准确定义哪些数据将发送到服务器,而无需修改数据。优点是,如果您下次打开高级搜索对话框,您将看到(并且可以根据需要修改)上次搜索请求。

如果您需要 beforeRequest 的相同实现或serializeGridData在网站的许多网格上,您可以根据 $.jgrid.defaults 设置该函数的默认实现:

$.extend($.jgrid.defaults, {
         datatype: 'json', // overwrite default value of any jqGrid parameter
         serializeGridData: function(postData) {
             // your implementation
         }
});

关于jquery - jqGrid高级搜索 'beforeSearch'选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5396352/

相关文章:

jqgrid - 你如何从服务器返回额外的数据给jqGrid?

insert - jqGrid 插入新行自定义

javascript - onSelectRow 方法内的 Keydown 事件

javascript - 使用 JqGrid 分组时数据无法正确显示

jqgrid添加到列标题的链接

javascript - Materializecss 选择双击切换

javascript - Jquery 中的queue() 和filter() 链接是否会提高性能?

jquery - 如何改变tinymce jquery框的大小?

javascript - 我如何使用 html5 在设备中获得摄像头和麦克风?

jquery - 将每个子项 ('id' ) 放入数组或字符串中