我正在使用最优秀的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<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;
}});
Run Code Online (Sandbox Code Playgroud)
这对我来说非常适合在提交之前构建我的部分选择.我也想以相同的方式使用高级搜索,但无法弄清楚如何在提交之前拦截POST.似乎没有可用的beforeSearch()选项,并且afterShowSearch或onClose选项没有正确的时间.关于如何进行的任何建议?
标记
你是对的,jqGrid 的高级搜索的当前实现没有任何像beforeSearch. 新版本的高级搜索是全新编写的,将有onSearch您可以使用的方法。像这样的方法beforeSearch将在 之前被触发trigger("reloadGrid",[{page:1}]),但在之后postData将被填充。
的beforeSearch具有一个更有趣的功能,因此您可以通过返回的值来filterToolbar停止搜索。所以可以起到验证的作用。truebeforeSearchbeforeSearch
在我的旧答案中,我描述了一种通用方法,可用于任何类型的验证或postData修改。在答案中,我展示了如何对reloadGridjqGrid 的事件处理程序进行子类化,并在需要时停止重新加载网格。该演示展示了这一点。以同样的方式,人们可以对数据进行任何其他修改。很遗憾,但答案的索引会非常糟糕,并且不会被 stackoverflow 上最多的搜索所喜欢。所以一个人不知道。
在您的情况下,您只需要在提交之前修改帖子数据,不需要停止网格重新加载。因此,您可以使用至少两个标准 jqGrid 事件来解决问题:beforeRequest和serializeGridData。在这两种情况下,您都可以访问search(as this.p.search) 和postData(as this.p.postData) 参数。如果使用任何搜索/过滤方法,参数的值search将被发送到服务器 as_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
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8762 次 |
| 最近记录: |