私は同じ質問をする最初の人ではないようです。最近私はthe close questionで尋ねました(答えに多くのコメントを読んでください)。他のold answer(the demoなど)は、開いている質問にはおそらく答えることができます。 AJAX呼び出しとsearch
パラメータの変更が手遅れになる前に機能beforeRequest
がすぐcaledされるという理由だけでbeforeRequest
を使用して
あなたのコードは動作しません。さらに、毎回filters
のオーバーウィードは、おそらく最良のアイデアではないでしょう。この場合、ユーザは他のグリッドフィルタを設定することができません。
私はあなたが必要とするソリューションの実装が非常に簡単であることを繰り返すことができます。必要なフィルタにpostData
のjqGridパラメータのfilters
プロパティを設定し、別のjqGridパラメータをsearch:true
に追加設定するだけです。それはすべてです!その後、ユーザーは事前検索ダイアログを開いてフィルタを上書きすることができます。ユーザは、事前検索ダイアログの「リセット」ボタンをクリックして、filters
を空の文字列に設定し、search:false
と設定することもできます。
search
パラメータまたはその他のjqGridがURLでどのように使用されるかを理解するためには、わかりやすくする必要があります。 jaGridのパラメータprmNamesには、を指定します。の名前は、URLの一部として、またはサーバーに送信されるデータの一部として送信されます。 prmNamesのデフォルト値はsearch:"_search"
が含まれているとjqGridで使用される内部populate関数のコードは、以下の単純化されたコードの断片があります
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"}
だから1はsearch
を設定する必要がありますURLの_search
パラメータを設定する
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);
jqGridのパラメータ。
the following demoをご覧ください。あなたは、ページからjqGridは、次のURLにHTTP GETを送信することをFirebugの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({ URL:loadUrl、 MTYPE: 'POST'、 POSTDATA:{BLOCK_ID:BLOCK_ID、 フィルタ: '' "" groupOp ":" AND "、" rules ":[{"フィールド ":"クラウドアップロード "、 " op ":" cn "、" data ":" costa "}]} '}、 検索:真、 autowidth:真、 高さ: '100%'、 データ型: "JSON"、 // ... }); - 私は私の検索を入れたときに ' –
は、[以前のコメントを編集するには時間を使い果たし]/filter paramsをgrid-init引数に追加すると、すべてがうまく動作します。ありがとう、本当にありがとう! –
@Oleg Ivanov:ようこそ! – Oleg