0

Web サイトを作成していて、自分のページに jqGrid があります。jqGrid の「searchGrid」関数を呼び出すカスタム ボタンを navgrid (ページャー) に追加して、高度な検索機能を使用しています。

$('#My_Grid_Id').jqGrid(settingsObject)
.navGrid('My_Grid_Id_toolbar1',{del:false,add:false,edit:false,refresh:false,search:false})
 .navButtonAdd('My_Grid_Id_toolbar1', 
 { 
    caption: 'Search', 
    buttonicon: 'ui-icon-search', 
    title: 'Search', 
    onClickButton: function() { 
        $(gridSelector).jqGrid ('searchGrid', {
            caption: 'Search',
            multipleSearch:true, 
            overlay: false,
            multipleGroup:true,
            recreateFilter: true
         });
     } 
});

ユーザーがページを離れたときに検索設定を保存して、ユーザーが戻ったときに再読み込みできるようにしたいと考えています。解決策はほとんどありますが、検索設定を保存して再読み込みした後、検索ダイアログ ウィンドウの [リセット] ボタンが期待どおりに機能しません。バックグラウンドで検索設定がリセットされたように見えますが、ウィンドウは更新されず、グリッドには古い結果が表示されたままです。

もう少し説明します。ウィンドウのアンロード イベントをキャッチし、ajax 呼び出しで potdata.filters パラメーターをサーバーに送信して検索設定を保存します。次に、後で読み込むことができる Cookie にデータを保存します。

$(window).unload( function () {
    $.ajax({
        type: "POST",
        url: saveUrl,
        dataType: 'json',
        traditional: true,
        async: false,
        data: { 
            searchSettings: $('#My_Grid_Id').getGridParam('postData').filters       
        }
    });
});

グリッドをリロードすると、Cookie に値があるかどうかを確認し、保存したフィルターをコンストラクターのグリッドに挿入します。

postData: { 
    filters: mySavedSearchSettings                  
},

この時点で、グリッドは正常に機能し、検索が保存され、結果が期待どおりに表示されます。検索ウィンドウ ダイアログを開くと、検索オプションが期待どおりに表示されます。しかし、[リセット] ボタンをクリックすると、ウィンドウが正しく更新されず、グリッドの結果も更新されません。onclick イベントをリセット ボタンに追加して検索を手動でリセットしようとしましたが、何も起こらないようです。

afterShowSearch: function() {
    $('.fm-button-icon-left').click(function(){
        $('#My_Grid_Id').jqGrid('setGridParam', { search: false, postData: { "filters": ""} }).trigger("reloadGrid");
    });
}

誰でも助けを提供できますか?私は近いと思います。何らかの方法で検索ウィンドウをリセットしてから、グリッドをリロードする必要があります。

4

1 に答える 1

1

答えは2つのことが判明しました。

まず、サーバー側のコードを正しく処理しなかったため、グリッドが正しいデータをリロードしていませんでした。私は最近 php を使い始めましたが、フィルター投稿データが null/空であることをコードが正しく識別しないというバグがありました。

次に、「searchGrid」関数を呼び出して検索ウィンドウ ダイアログをリセットし、再度開くことができました。したがって、検索が表示された後、次のようにオンクリック イベントをリセット ボタンに追加します。

$(gridSelector).navButtonAdd(gridSelector + '_toolbar1', 
    { 
        caption: 'Search', 
        buttonicon: 'ui-icon-search', 
        title: 'Search', 
        onClickButton: function() { OpenAdvancedSearchDialog(gridSelector); } 
    });
}

function OpenAdvancedSearchDialog(gridSelector) {
    $(gridSelector).jqGrid ('searchGrid', {
        caption: 'Search',
        multipleSearch:true, 
        overlay: false,
        multipleGroup:true,
        recreateFilter: true,
        afterShowSearch: function() {
            $('.fm-button-icon-left').click(function(){
                OpenAdvancedSearchDialog(gridSelector);
            });
       }
    });
}
于 2012-05-30T11:08:14.397 に答える