0

jqgridフィルタリングのOlegソリューションを見て、jqgridをフィルタリングするコードを作成しました。3つの異なる研究分野があるという違いがありますが、グローバル検索を実行するためのボタンは1つだけです。かなりうまくいきますが、1回目は正しく実行しても2回目は2回、3回目は4回、4回目は8回というように、何度も検索すると問題が発生します。コードは次のとおりです。

var grid= $("#mygrid");

function executeSearchInSoftgrid() {    
$("#executeSearch").click(function() {
    f = {groupOp:"AND",rules:[]};
    var searchFiler = $("#filterField1").val(), f;
    var searchFiler2 = $("#filterField2").val(), f;
    var searchFiler3 = $("#filterField3").val(), f;
    if (searchFiler.length === 0) {
        grid[0].p.search = false;
        $.extend(grid[0].p.postData,{filters:""});
    }
    if (searchFiler2.length === 0) {
        grid[0].p.search = false;
        $.extend(grid[0].p.postData,{filters:""});
    }
    if (searchFiler3.length === 0) {
        grid[0].p.search = false;
        $.extend(grid[0].p.postData,{filters:""});
    }

    f.rules.push({field:"field1",op:"cn",data:searchFiler});
    f.rules.push({field:"field2",op:"cn",data:searchFiler2});
    f.rules.push({field:"field3",op:"cn",data:searchFiler3});
    grid[0].p.search = true;
    $.extend(grid[0].p.postData,{filters:JSON.stringify(f)});
    grid.trigger("reloadGrid",[{page:1,current:true}]);
    alert("searching");
}); 

}

関数(loadcomplete、gridcomplete、readyfunction)を呼び出す場合は常に、動作は同じです。何か案は???ありがとう

編集

これが私が関数を呼び出す場所です、そしてそれは最終的に機能します:

var initialize = true;
$("#mygrid")
        .jqGrid({
            gridComplete:function () {
                if(initialize == true) {
                executeSearchInSoftgrid();
                initialize = false;
                //....
                }
4

1 に答える 1

1

コードの問題は、おそらく一度に複数回呼び出す関数$("#executeSearch").clickの内部に配置したことだと思います。executeSearchInSoftgridコード

$("#executeSearch").click(function() {...});

function() {...}これは、ユーザーが。を持つ要素をクリックすると自動的に呼び出されるイベントハンドラー(関数)の登録にすぎませんid="executeSearch"イベントに複数のイベントハンドルを登録できます click。この場合、すべてのコールバックは登録されている順序で呼び出されます。

したがって、コールバック関数は1回だけ登録する必要があります。ユーザーの操作とは関係なくイベントハンドラーを呼び出す必要がある場合は、$("#executeSearch").triggerHandler('click')ここを参照)または。を使用してこれを行うことができます$("#executeSearch").click();

于 2012-07-30T16:18:52.590 に答える