是否可以将当前应用的过滤器参数显示为附加到标题栏中主标题的描述性字符串
即
“客户 - [ Field1 = 'ABC' 且 Field2 = 'CDE' ]”
找不到应用过滤器后可以 Hook 的事件?
最佳答案
我发现你实际上并不需要在搜索后发生事件。每次搜索请求时,网格中的数据都会重新加载。因此,您可以使用 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);
}
});
如果您不使用“高级搜索”,则应使用 searchField
、searchOper
和 searchString
而不是 过滤器
code> 根据搜索条件构建网格标题。
目前在示例中我不使用本地化名称进行操作,但很明显可以做到这一点。
关于javascript - JQGrid 在标题栏中显示过滤器详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3204644/