jquery – jqGrid高级搜索’beforeSearch’选项?

前端之家收集整理的这篇文章主要介绍了jquery – jqGrid高级搜索’beforeSearch’选项?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

我正在使用filterToolbar来搜索我的网格.由于我需要与之交互的后端的性质,我无法使用jqGrid提供的过滤器,而是需要在提交之前拦截搜索修改postdata.我使用filterToolbar选项“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

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

标记

最佳答案
你是对的,目前高级搜索jqGrid的实现没有像beforeSearch这样的事件.全新编写的高级搜索的新版本将具有onSearch方法,您可以使用它.像beforeSearch这样的方法将在触发器之前触发(“reloadGrid”,[{page:1}]),但是在postData将被填充之后.

filterToolbar的beforeSearch还有一个有趣的功能,因此您可以通过从beforeSearch返回true值来停止搜索.所以beforeSearch可以扮演验证角色.

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

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

serializeGridData中,您甚至可以定义哪些数据准确地发送到服务器而无需修改数据.优点是,如果您下次打开预先搜索对话框,您将看到(并且可以根据需要修改)上次搜索请求.

如果您需要在网站的许多网格上具有相同的beforeRequestserializeGridData实现,则可以设置与.jgrid.defaults相关的函数的默认实现:

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

猜你在找的jQuery相关文章