Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery jqGrid高级搜索&x27;搜索前';选项_Jquery_Jqgrid - Fatal编程技术网

Jquery jqGrid高级搜索&x27;搜索前';选项

Jquery jqGrid高级搜索&x27;搜索前';选项,jquery,jqgrid,Jquery,Jqgrid,我正在使用最优秀的jqGrid插件,通过搜索,我在这个网站上找到了很多帮助,但是我发现了一个我无法解决的问题,或者找到了一个解决方案。这将是我在这里的第一篇文章 我正在使用filterToolbar搜索我的网格。由于需要与之交互的后端的性质,我无法使用jqGrid提供的过滤器,而是需要在提交之前拦截搜索并修改postdata。我使用filterToolbar选项“beforeSearch”执行此操作,如下所示: $("#SC_grid").jqGrid('filterToolbar', {str

我正在使用最优秀的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;
}});
$(“#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事件来解决此问题:和。在这两种情况下,您都可以访问
搜索
(as
this.p.search
)和
postdata
(as
this.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:(