Javascript JQGrid在标题栏中显示过滤器详细信息

Javascript JQGrid在标题栏中显示过滤器详细信息,javascript,jquery,jqgrid,Javascript,Jquery,Jqgrid,是否可以在标题栏中将当前应用的过滤器参数显示为附加到主标题的描述性字符串 i、 e “客户-[Field1='ABC'和Field2='CDE']” 应用筛选器后,找不到可以挂接的事件?尝试挂接到该事件,在该事件中更新网格标头。从文档中: 每次显示搜索对话框后,都会触发此事件(如果已定义) 我发现在搜索之后,您实际上不需要有活动。在每次搜索请求时,网格中的数据将被重新加载。因此,您可以使用诸如beforeRequest、loadBeforeSend、serializeGridData、gridC

是否可以在标题栏中将当前应用的过滤器参数显示为附加到主标题的描述性字符串

i、 e

“客户-[Field1='ABC'和Field2='CDE']”

应用筛选器后,找不到可以挂接的事件?

尝试挂接到该事件,在该事件中更新网格标头。从文档中:

每次显示搜索对话框后,都会触发此事件(如果已定义)


我发现在搜索之后,您实际上不需要有活动。在每次搜索请求时,网格中的数据将被重新加载。因此,您可以使用诸如
beforeRequest
loadBeforeSend
serializeGridData
gridComplete
loadComplete
之类的事件

从标题示例中,我假设您使用“高级搜索”。我只想演示可能的解决方案的主要思想,因此我选择了
loadComplete
来实现捕获更改:

jQuery('#list').jqGrid({
    // ...
    loadComplete: function(data) {
        var postData = jQuery('#list').getGridParam("postData");
        var newCapture = "Title";
        if (postData._search === true && typeof postData.filters !== "undefined") {
            var filters = jQuery.parseJSON(postData.filters);
            newCapture = "Title: [";
            var rules = filters.rules;
            for (var i=0; i<rules.length; i++) {
                var rule = rules[i];
                var op = rule.op;  // the code name of the operation
                if (jQuery.fn.searchFilter && jQuery.fn.searchFilter.defaults &&
                    jQuery.fn.searchFilter.defaults.operators) {
                    // find op description 
                    var operators = jQuery.fn.searchFilter.defaults.operators;
                    for (var j=0; j<operators.length; j++) {
                        if (operators[j].op === rule.op) {
                            op = operators[j].text;
                            //op = $.jgrid.search.odata[j];
                            break;
                        }
                    }
                }
                newCapture += rule.field + " " + op + " '" + rule.data + "'";
                if (i+1 !== rules.length)
                    newCapture += ", ";
            }
            newCapture += "]";
        }
        jQuery('#list').setCaption(newCapture);
    }
});
jQuery('#list').jqGrid({
// ...
loadComplete:函数(数据){
var postData=jQuery(“#list”).getGridParam(“postData”);
var newCapture=“Title”;
if(postData.\u search==true&&typeof postData.filters!==“未定义”){
var filters=jQuery.parseJSON(postData.filters);
newCapture=“Title:[”;
var规则=filters.rules;

对于(var i=0;i使用工具栏搜索时是否会触发?啊……不,不会。在这种情况下,请查看
afterSearch
,发自:@Oleg-很棒的解决方案。我不明白您上次对如何在标题栏中包含工具栏搜索条件的评论。工具栏搜索似乎只是将实际字段和值添加到了po中因此,如果我在一个名为Description的字段上搜索“test”,我只会在postdata中看到一个名为Description的元素,其值为“test”。我看不到任何“searchField”、“searchOper”和“searchString”。另外,您如何支持多个工具栏列搜索???@Oleg-对我的上述评论有何想法???@ooo:当前代码将文本“Title:[…]放在网格捕获中。文本“Title”是英文的,因此它不是本地化的。
[…]
中的文本包含德语的本地化文本,如“beginnt mit”,而不是以“用英语。在最后一句中,我解释了一个人可以编写选择”标题的代码"也对应于语言。此外,可以使用相应列的列标题来代替
规则.field
。如果将代码包含在一个网格中,您将看到我的意思。@ooo:如果使用而不是属性
searchField
searchOper
searchString
,则将在其中使用对于
postData
而不是
filters
。示例中的代码仅适用于“高级搜索”。@ooo:我想你问了关于我的答案的问题,你对此发表了评论,但你问了新问题。对于你的第一个问题,“我没有看到任何“searchField”、“searchOper”和“searchString”“。此外,您如何支持多个工具栏列搜索”。在工具栏搜索中,您只能针对的
sopt
of为每列定义一个搜索操作(“searchOper”)。您不能为每列定义多个搜索条件。