Jquery jqGrid高级搜索&x27;搜索前';选项
我正在使用最优秀的jqGrid插件,通过搜索,我在这个网站上找到了很多帮助,但是我发现了一个我无法解决的问题,或者找到了一个解决方案。这将是我在这里的第一篇文章 我正在使用filterToolbar搜索我的网格。由于需要与之交互的后端的性质,我无法使用jqGrid提供的过滤器,而是需要在提交之前拦截搜索并修改postdata。我使用filterToolbar选项“beforeSearch”执行此操作,如下所示:Jquery jqGrid高级搜索&x27;搜索前';选项,jquery,jqgrid,Jquery,Jqgrid,我正在使用最优秀的jqGrid插件,通过搜索,我在这个网站上找到了很多帮助,但是我发现了一个我无法解决的问题,或者找到了一个解决方案。这将是我在这里的第一篇文章 我正在使用filterToolbar搜索我的网格。由于需要与之交互的后端的性质,我无法使用jqGrid提供的过滤器,而是需要在提交之前拦截搜索并修改postdata。我使用filterToolbar选项“beforeSearch”执行此操作,如下所示: $("#SC_grid").jqGrid('filterToolbar', {str
$("#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;
}});
$(“#SC#u grid”).jqGrid('filterToolbar',{stringResult:true,SearchOneNet:true,defaultSearch:cn,beforeSearch:function(){
var postData=$(“#SC#u grid”).jqGrid('getGridParam','postData');
var newPostData='1=1';
var searchData=jQuery.parseJSON(postData.filters);
对于(var iRule=0;iRule您是对的,jqGrid的当前高级搜索实现没有任何类似于beforeSearch
的事件。全新编写的高级搜索的新版本将具有您可以使用的onSearch
方法。类似beforeSearch
的方法将在t之前触发装配工(“重新加载网格,[{page:1}])
,但在postData之后将填充
filterToolbar
的beforeSearch
还有一个有趣的功能,因此您可以通过从beforeSearch
返回true
值来停止搜索。因此beforeSearch
可以起到验证作用
在我的一篇文章中,我描述了一种通用方法,它可以用于任何类型的验证或postData
修改。在回答中,我展示了如何将jqGrid的reloadGrid
事件处理程序子类化,并在需要时停止重新加载网格。如图所示。在这里,我们可以用同样的方式进行任何其他修改很遗憾,这将是非常糟糕的索引,并且不会喜欢在stackoverflow上进行大多数搜索。所以我们不知道这一点
在您的情况下,您只需在提交之前修改postdata,而不需要停止网格重新加载。因此,您可以使用至少两个标准jqGrid事件来解决此问题:和。在这两种情况下,您都可以访问搜索(asthis.p.search
)和postdata
(asthis.p.postdata
)参数。search
参数的值将作为\u search
发送到服务器,并且如果使用了任何搜索/筛选方法,将设置为true
。因此,在事件处理程序的其中一个内,您可以修改此.p.postData
在您的内部,甚至可以定义哪些数据将准确地发送到服务器,而无需修改数据。其优点是,如果您下次打开“高级搜索”对话框,您将看到(并且可以根据需要修改)最后的搜索请求
如果您需要在网站的多个网格上使用相同的实现,您可以针对$.jgrid.defaults
,设置函数的默认实现:
$.extend($.jgrid.defaults, {
datatype: 'json', // overwrite default value of any jqGrid parameter
serializeGridData: function(postData) {
// your implementation
}
});
欢迎来到stackoverflow,我的第一个问题非常好。+1。在短时间内,我将尝试描述一种可能的方法来解决您的问题。直到稍后…感谢您对这个问题的回答。我从您为您的答案创建的演示中学到了很多,非常感谢。我相信我能够我也会用你的演示来完成这一步。如果其他方法都失败了,很高兴知道即将发布的版本将添加一个方法来处理这个问题。有没有办法只在搜索为真的列上循环?@Frabiaca:对不起,但我不明白你的意思。你指的是哪个循环?@oleg如果我在我的ColMod中声明了10列el,但其中只有3个是可搜索的(我的意思是使用search:true属性),是否可以在这3列上创建一个“for”循环?我问了这个问题,因为我的网格中没有定义postData.filters:(