在我看來,你不是第一個問同樣問題的人。最近我詢問了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