jquery – 在jqGrid中将“搜索”远程和其他所有内容(排序,分页等)本地化

前端之家收集整理的这篇文章主要介绍了jquery – 在jqGrid中将“搜索”远程和其他所有内容(排序,分页等)本地化前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个Django项目,该项目使用JQgrid显示数据库中的数据.

我想要实现的是只有搜索选项连接到执行远程搜索,其中服务器将返回结果集,并且每个其他jqgrid选项(如列排序,分页等)将在客户端执行.

我知道这可以通过设置loadonce:true并根据.click()事件在’local’和’json’之间切换’datatype’参数来完成,具体取决于我是单击sort还是next-page,search等.

还有另一种方法吗?如果没有,你们可以建议一个干净的方式来做上述黑客行为.

谢谢!

解决方法

我设法完成了这项工作,我很高兴与大家分享这一切.我在解释下面发布了我的整个jqgrid代码供您参考.

首先,我使用JSON作为结果,因此使用jsonReader.

接下来,以下是特定于实现{{search:remote},{sorting:local},{pagination:local}}行为的设置.

>设置loadonce:false或者点击“搜索”按钮不会命中服务器,而是始终执行本地搜索.
>我想实现jqGrid的多重搜索功能,因此可以在寻呼机栏中显示微小的“放大镜”.

jQuery("#list2").jqGrid('navGrid','#pager2',{ del:false,add:false,edit:false},{},{multipleSearch:true});

>现在我如何实现远程搜索功能是通过在onSearch和onClose事件上将数据类型从local切换到json.即在触发搜索查询(即单击“查找”按钮)时,我将loadonce设置为false,将数据类型设置为json.这确保了远程搜索.
现在,我们的网格填充了远程搜索的数据,我们要切换回数据类型:本地,但是明确地设置它的OnClose不工作,所以不是我设置loadonce:真的,后来设置的数据类型:本地本身更高版本.
另请注意,我有closeAfterSearch:true,cloSEOnEscape:true,因此我确保在触发搜索查询后始终关闭onClose事件.

jQuery("#list2").jqGrid('searchGrid',{multipleSearch: true,closeAfterSearch: true,cloSEOnEscape: true,onSearch: function(){$("#list2").setGridParam({loadonce: false,datatype: 'json'});
                                                                                    $("#list2").trigger("reloadGrid");                                  
                                                                                    },onClose: function(){$("#list2").trigger("reloadGrid");                                                                                  
                                                                                $("#list2").setGridParam({loadonce: true});
                                                                                $(".ui-icon-refresh").trigger('click');                                                                                 
                                                                                }
                                                });

$(“.ui-icon-refresh”).触发器(‘click’);加载结果后强制刷新.在某些情况下这是必要的(不知道为什么).我自己偶然发现了这个问题,我不知道为什么会这样.如果你有一个想法,我很想知道背后的原因.

>最后,每次加载网格时,默认情况下都会弹出搜索框.所以我只需点击模式框的’x’按钮就强行关闭它. Hacky但是有效! :P

$(".ui-icon-closethick").trigger('click');

<<<整个jqGrid代码>>>

请原谅我代码中的’xyz’.我在那里有一些Django代码,所以我只是用xyz替换它以避免任何混淆.

jQuery(document).ready(function(){ 

  $("#list2").jqGrid({

    url:'xyz',datatype: 'json',loadonce: false,mtype: 'GET',colNames:xyz
    colModel :xyz,jsonReader : {
                repeatitems: false,root: "rows",page: "page",total: "total",records: "records"
        },height: '100%',width: '100%',pager: '#pager2',rowNum:15,rowList:[10,15,30],viewrecords: true,caption: '&nbsp',autowidth: false,shrinkToFit: true,ignoreCase:true,gridview: true

   });
  jQuery("#list2").jqGrid('navGrid',{multipleSearch:true});
  jQuery("#list2").jqGrid('navButtonAdd',{
                             caption: "",buttonicon: "ui-icon-calculator",title: "choose columns",onClickButton: function() {
                                 jQuery("#list2").jqGrid('columnChooser');
                            }
                         });
  jQuery("#list2").jqGrid('searchGrid',datatype: 'json'});
                                                                                        $("#list2").trigger("reloadGrid");                                  
                                                                                        },onClose: function(){$("#list2").trigger("reloadGrid");                                                                                  
                                                                                    $("#list2").setGridParam({loadonce: true});
                                                                                    $(".ui-icon-refresh").trigger('click');                                                                                 
                                                                                    }
                                                    });


  $(window).bind('resize',function () {
    clearTimeout(resizeTimer);
    resizeTimer = setTimeout(resizeGrids,60);
    divwidth = $(".content-Box-header").width() - 40;
    //alert(divwidth);
   $("#list2").setGridWidth(divwidth,true);

    }); 

    $(window).resize();
    $(".ui-icon-closethick").trigger('click');

});

猜你在找的jQuery相关文章