手动排序后仅在jqgrid中工作的筛选器

手动排序后仅在jqgrid中工作的筛选器,jqgrid,filtering,Jqgrid,Filtering,我有一个jqgrid应用程序。我在左面板上有过滤器(带有复选框),主面板中的网格应该只列出过滤的行。它实际上可以工作,但只有在单击列的名称并对列进行排序后才能工作 创建过滤器的函数如下所示: function filtraTablaElemRegFiltros(filtroZona, filtroEnt,filtroVal){ filtroORZona={groupOp:"OR",rules:[]}; filtroOREnt={groupOp:"OR",rules:[]};

我有一个jqgrid应用程序。我在左面板上有过滤器(带有复选框),主面板中的网格应该只列出过滤的行。它实际上可以工作,但只有在单击列的名称并对列进行排序后才能工作

创建过滤器的函数如下所示:

function filtraTablaElemRegFiltros(filtroZona, filtroEnt,filtroVal){

   filtroORZona={groupOp:"OR",rules:[]};
   filtroOREnt={groupOp:"OR",rules:[]};
   filtroORVal={groupOp:"OR",rules:[]};

   filtro = {groupOp:"AND",groups:[]};

    var grid = $("#tabla");

    var filtroZonaArray= new Array();
    var filtroEntArray= new Array();
    var filtroValArray= new Array();


    todosElemReg= grid.jqGrid('getGridParam', 'data');


    filtroZonaArray=filtroZona.split("-");
    filtroEntArray=filtroEnt.split("-");
    filtroValArray=filtroVal.split("-");

    for(i=1;i<filtroZonaArray.length;i++){
        filtroORZona.rules.push({"field":"nombre","op":"bw","data":filtroZonaArray[i]});
    }
    for(i=1;i<filtroEntArray.length;i++){
        filtroOREnt.rules.push({"field":"entidadCod","op":"eq","data":filtroEntArray[i]});
    }
    for(i=1;i<filtroValArray.length;i++){
        filtroORVal.rules.push({"field":"validado","op":"eq","data":filtroValArray[i]});
    }
    filtro.groups.push(filtroORZona);
    filtro.groups.push(filtroOREnt);
    filtro.groups.push(filtroORVal);

    grid[0].p.search = filtro.groups.length > 0; //busca si filtro no está vacío
    $.extend(grid[0].p.postData,{filters:JSON.stringify(filtro)});   
    grid.trigger("reloadGrid",[{page:1}]);

}
左侧的html面板包括:

<div id="validacion">
                        <input type="checkbox" name="valSelect" id="VALIDO" onclick="filtrarContenido()" /><label for="VALIDO">Validado</label>
                        <input type="checkbox" name="valSelect" id="INVALIDO" onclick="filtrarContenido()" /><label for="INVALIDO">Invalidado</label>
                        <input type="checkbox" name="valSelect" id="PENDIENTE" onclick="filtrarContenido()" /><label for="PENDIENTE">Pendiente</label>
                </div>
有人能帮我吗?为什么单击复选框后不显示过滤后的数据?它实际上是在过滤它们,但在单击排序列之前不会显示它们


谢谢你的阅读

我刚刚意识到,如果在重新加载网格之前,我显示一个警报窗口,它也可以工作。奇怪…我还是有这个问题。有人能给我一个线索吗?谢谢
<div id="validacion">
                        <input type="checkbox" name="valSelect" id="VALIDO" onclick="filtrarContenido()" /><label for="VALIDO">Validado</label>
                        <input type="checkbox" name="valSelect" id="INVALIDO" onclick="filtrarContenido()" /><label for="INVALIDO">Invalidado</label>
                        <input type="checkbox" name="valSelect" id="PENDIENTE" onclick="filtrarContenido()" /><label for="PENDIENTE">Pendiente</label>
                </div>
function filtrarContenido(){
    var valorZona="";
    var valorEnt="";
    var valorVal="";


    $("input:checkbox[name=zonaSelect]:checked").each(function() {
        valorZona=valorZona+"-"+$(this).attr('id');
    });
   $("input:checkbox[name=entSelect]:checked").each(function() {
        valorEnt=valorEnt+"-"+$(this).attr('id');
    });
    $("input:checkbox[name=valSelect]:checked").each(function() {
        valorVal=valorVal+"-"+$(this).attr('id');
    });

    urlPrincipal=document.getElementById("principal").contentWindow.location.href;

    posArgumentos=urlPrincipal.search('codigo_descarga');

    if(posArgumentos!='-1') urlPrincipal=urlPrincipal.substring(0,posArgumentos-1);

    urlNueva=urlPrincipal+'?codigo_descarga=0'+'&'+'filtroZona='+valorZona+'&'+'filtroEnt='+valorEnt+'&'+'filtroVal='+valorVal;


    document.getElementById("principal").contentWindow.location.href=urlNueva;

}