在我看来,你不是第一个问同样问题的人。最近我询问了the close question(读了很多评论的答案)。另一个old answer包括the demo可能会回答你的一些问题。
使用beforeRequest
不工作,只是因为功能beforeRequest
将Ajax调用和search
参数的变化之前立即caled你的代码是太晚。此外,每次都可能不是最好的想法。在用户不能设置任何其他电网滤波器的情况下。
所以我可以重复一遍,您需要的解决方案的实施非常简单。您只需将jqGrid的postData
参数的filters
属性设置为您需要的过滤器,并另外设置另一个jqGrid参数search:true
。就这些!稍后,用户将能够打开高级搜索对话框并覆盖过滤器。用户也可以点击预先搜索对话框中的“重置”按钮,并将filters
设置为空字符串,search:false
。
为了更好地理解,我必须清楚如何在URL中使用search
参数或其他jqGrid。 jqGrid的参数prmNames定义了参数名称作为URL的一部分发送或作为发送到服务器的数据的一部分。的prmNames含有search:"_search"
默认值和通过的jqGrid使用的内部populate函数的代码具有以下简化的代码片段:
var prm = {}, pN=ts.p.prmNames;
if(pN.search !== null) {prm[pN.search] = ts.p.search;}
if(pN.nd !== null) {prm[pN.nd] = new Date().getTime();}
if(pN.rows !== null) {prm[pN.rows]= ts.p.rowNum;}
if(pN.page !== null) {prm[pN.page]= ts.p.page;}
if(pN.sort !== null) {prm[pN.sort]= ts.p.sortname;}
if(pN.order !== null) {prm[pN.order]= ts.p.sortorder;}
...
$.extend(ts.p.postData,prm);
其中
prmNames: {page:"page",rows:"rows", sort: "sidx",order: "sord", search:"_search",
nd:"nd", id:"id",oper:"oper",editoper:"edit",addoper:"add",
deloper:"del", subgridid:"id", npage: null, totalrows:"totalrows"}
所以设置_search
参数URL中的一个应该设置search
jqGrid的参数。
看看the following demo。你可以很容易检验使用的Firebug从页面的jqGrid发送HTTP GET与以下网址Fiddler:
http://www.ok-soft-gmbh.com/jqGrid/MultisearchFilterAtStart1.json?filters=%7B%22groupOp%22%3A%22AND%22%2C%22rules%22%3A%5B%7B%22field%22%3A%22invdate%22%2C%22op%22%3A%22gt%22%2C%22data%22%3A%222007-09-06%22%7D%2C%7B%22field%22%3A%22invdate%22%2C%22op%22%3A%22lt%22%2C%22data%22%3A%222007-10-04%22%7D%2C%7B%22field%22%3A%22name%22%2C%22op%22%3A%22bw%22%2C%22data%22%3A%22test%22%7D%5D%7D&_search=true&nd=1297508504770&rows=10&page=1&sidx=id&sord=asc
所以它做的正是你需要的。演示代码包含以下代码片段:
$("#list").jqGrid({
url: 'MultisearchFilterAtStart1.json',
datatype: "json",
postData: {
filters:'{"groupOp":"AND","rules":['+
'{"field":"invdate","op":"gt","data":"2007-09-06"}'+
',{"field":"invdate","op":"lt","data":"2007-10-04"}'+
',{"field":"name","op":"bw","data":"test"}]}'
},
search:true,
// ...
});
伟大的!代码的最后一个文档片断完全解决了痛苦 - 这 - '的jQuery( '#' + BLOCK_ID).jqGrid({ 网址:使用loadURL, MTYPE: 'POST', POSTDATA:{BLOCK_ID:BLOCK_ID, 过滤器: '{“groupOp”:“AND”,“rules”:[{“field”:“Cloud Upload”, “op”:“cn”,“data”:“costa”}]'', search:真的, autowidth:真实, 高度: '100%', 数据类型: “JSON”, // .. });' –
[上编辑之前的评论已经没有时间了 - 当我把我的搜索/将params过滤到grid-init参数中,它完全可以实现这一切。谢谢,我非常感谢你的帮助! –
@ Oleg Ivanov:不客气! – Oleg