3

ie8、jqgrid 4.3.3、jquery 1.7.2 または 1.5.2 を使用すると、複数の検索で一部の検索パラメーターが欠落しているようです。初めて新しい検索行を追加すると、リクエスト本文に表示されますが、空白の値 ("") などがあります。

"filters":"{\"groupOp\":\"AND\",\"rules\":[{\"field\":\"code\",\"op\":\"eq\",\"data\":\"\"}]}", 

同じパラメーターを使用した後続の検索では、正しい値が送信されます。私の基本的なセットアップは次のとおりです(簡略化)

$('#Table').jqGrid({
         //....
    datatype: 'json',
    colNames: ['Code'],
    colModel: [{
        name: 'Code',
        index: 'Code'}],
    pager: '#Pager'
}).jqGrid('navGrid', '#Pager', {
    add: false,
    edit: false,
    del: false,
    refresh: false
}, {}, {}, {}, {
    multipleSearch: true
}).trigger('reloadGrid');

更新: jsfiddle を追加

久しぶりに、cmTemplate を使用して searchoptions sopt を指定し、データ テキスト ボックスの外側をクリックせずに [検索] をクリックした場合にのみ、エラーが発生することがわかりました。 こちらの jsfiddle を参照してください(検索値を入力した直後に [検索] ボタンをクリックすることを忘れないでください)

4

1 に答える 1

1

これは、ここで説明したjqGrid入力フィールドの更新に関する古いバグだと思います。次のコールバックを挿入してみてください

afterRedraw: function () {
    $(this).find(".input-elm").triggerHandler('change', [true]);
}

ここのように。4.3.3の代わりにjqGrid4.4.1を使用することもできます。バージョンにはそのような問題はないはずです。

更新:以前に投稿してコミットした変更が元に戻されていることがわかりました。こちらをご覧ください。私の提案は多くの改善のコレクションでした:

  1. 検索ダイアログのボタンのスタイルは、jQueryUIやjqGridの他のすべての部分と同じように使用されました。uiButtons: false古いスタイルを使用するために使用できます。
  2. デフォルト名の「+」、「-」、「+ {}」ボタンと、現在のバージョンのjqGrid(、、、)でのみ英語で表示されるツールチップを'Add rule'変更'Delete rule'でき'Add subgroup'ます'Delete group'
  3. フォーカスは、入力コントロールまたはボタンに追加で設定されます。これにより、マウスを使用しなくても、キーボードで検索ダイアログを使用できます。
  4. "change"検索ダイアログからデータを最後に読み取る前に、すべての入力コントロールでイベントがトリガーされます。

最後の変更は、問題を解決するために重要な場合があります。

filterData関数の実装を変更する必要があります。行を追加する必要があります

$(this).find(".input-elm").each(function() {
    $(this).triggerHandler("change");
});

行の前。

問題は、jqGridが'change'イベントを検索ダイアログのすべての入力フィールドにバインドすることです(を参照)。ユーザーが入力すると、「変更」イベントを検索するためのデータがトリガーされ、内部データfilterrule.dataのの一部であるをfilter参照)が変更されます。ユーザーが[検索]ボタンをクリックすると、の現在の値が取得されます(を参照)。問題は、[検索]ボタンでイベントを処理した、一部のWebブラウザでイベントが処理されることです。そのため、最後の検索フィルターからの入力データはまだ設定されていません。以前のすべての入力コントロールの呼び出しfilterchange'click'.triggerHandler("change")からのデータfilterが返されると、問題が解決する可能性があります。いくつかの不要なchangeイベントが呼び出される可能性がありますが、filterのデータがからのデータと同じであることを確認します。

変更を元に戻すのは悪い考えだったと思います。

searchOnEnter: trueオプションを使用し、キーを使用.triggerHandler("change")して検索を開始する場合は、行が原因で問題が発生しないはずです。Enter

$("#"+fid+"_search").focus().click();

クリックイベントを処理する前に、フォーカスが明示的に[検索]ボタンに設定されます。このようにして、"change"イベントは間接的にトリガーされ、のデータfilterが更新されます。

イベントを直接トリガーすることなく、あなたが説明した問題を解決できると思いchangeます。その代わりに、フォーカスの明示的な設定を含めることができます

$("#"+fid+"_search").focus();

clickイベントハンドラーの内部(を参照)。呼び出される行の これを行うことが重要です。.jqFilter('filterData')

于 2012-09-07T09:28:14.947 に答える