jqgrid过滤奇怪的行为

时间:2012-07-30 15:53:45

标签: jquery jqgrid filtering

查看Oleg solution的jqgrid过滤,我写了一个代码来过滤我的jqgrid。它有3个不同的研究领域,但只有一个按钮来执行全局搜索。它工作得很好,但即使第一次搜索执行正确,第二次搜索执行2次,第三次搜索执行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;
                //....
                }

1 个答案:

答案 0 :(得分:1)

我认为您的代码中的问题是您将$("#executeSearch").click放在executeSearchInSoftgrid函数中,您可能更多地调用它。代码

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

就像注册事件处理程序(函数function() {...})一样,如果用户单击具有id="executeSearch"的元素,它将自动调用。您可以向click事件注册多个事件句柄。在这种情况下,将按照已注册的顺序调用所有回调。

所以你应该只注册一次回调函数。如果您需要独立于用户交互的调用事件处理程序,您可以使用$("#executeSearch").triggerHandler('click')(请参阅here)或仅使用$("#executeSearch").click();执行此操作。