jqgrid inlineNav cloneToTop?

Posted

技术标签:

【中文标题】jqgrid inlineNav cloneToTop?【英文标题】:jqgrid inlineNav cloneToTop? 【发布时间】:2011-12-14 17:28:31 【问题描述】:

我正在玩 jqGrid,我有一个寻呼机(带有查看和刷新)和一个 inlineNav(带有添加、编辑、保存、取消)的组合。

我有 toppager:true 和 cloneToTop:true 将寻呼机控件放置在顶部和底部。但是我似乎无法对我的 inlineNav 做同样的事情。

完整代码如下,但我尝试执行以下操作,但顶部按钮没有正确响应,而且有点乱:

$("#pager_left").clone().appendTo("#list_toppager_left");

谁能帮忙?

    $(document).ready(function() 

        var lastSel;

  $("#list").jqGrid(
    url:'db.php',
    datatype: 'json',
    mtype: 'GET',
    colNames:[
    /*...*/
    ],
    colModel :[ 
      /*...*/
    ],
    pager: '#pager',
    autowidth:true,
    height: "100%",
    rowNum:20,
    rowList:[20,50,100,1000],
    loadtext: 'Loading...',
    viewrecords: true,
    sortname:'BUSINESS',
    sortorder:"ASC",
    multiselect:false,
    sortable:true,
    toppager:true,
    ignorecase:true,
    gridview: true,
    editurl:"db_edit.php",
    caption: 'Bath BID',
    onSelectRow: function(id) 
        if(id && id!==lastSel) 
            $('#list').saveRow(lastSel);
            lastSel=id; 
        
        
  ).navGrid('#pager', 
    edit:false,
    add:false,
    del:true,
    view:true,
    search:false,
    viewtext:"View", 
    closeOnEscape:true,
    edittext:"Edit", 
    refreshtext:"Refresh", 
    addtext:"Add", 
    deltext:"Delete", 
    searchtext:"Search",
    cloneToTop:true,,,,multipleSearch:true);

    $("#list").jqGrid('filterToolbar',stringResult: true,searchOnEnter : true);
    $("#list").jqGrid('inlineNav','#pager',  
        edittext:"Edit", 
        addtext:"Add",
        savetext:"Save",
        canceltext:"Cancel",
        cloneToTop:true
    );

提前致谢!

【问题讨论】:

【参考方案1】:

我分析了你的问题。首先navGrid 支持选项cloneToTop: true,但inlineNav 不支持。此外,按钮的 id 将使用网格 id 作为前缀来构造。结果是会有

list_iladd, list_iledit, list_ilsave, list_ilcancel

作为 ID。另一方面,标准 navGrid 按钮的 ID 在cloneToTop: true 之后将具有以下 ID:

view_list, del_list,
view_list_top, del_list_top

所以一个人不能只用两个寻呼机呼叫navGrid 两次:

$("#list").jqGrid('inlineNav', '#list_toppager', 
    edittext: "Edit",
    addtext: "Add",
    savetext: "Save",
    canceltext: "Cancel"
);
$("#list").jqGrid('inlineNav', '#pager', 
    edittext: "Edit",
    addtext: "Add",
    savetext: "Save",
    canceltext: "Cancel"
);

将收到一个结果id重复(请参阅the demo)。

在第二次调用 inlineNav 之前进行手动 id 修改也不会真正有帮助(参见 the next demo),因为单击内联按钮后将执行的代码使用相同的 id 构建规则。因此,只有具有原始 ID 的按钮才会被禁用或启用。

我可以总结一下:inlineNav 的当前实现不支持顶部寻呼机。我建议您只使用一次inlineNav。如果您需要在第二个寻呼机中使用图标,则最好检查inlineNav 的源代码(例如,参见here)并以相同的方式添加关于navButtonAdd 的新按钮并使用另一个ID。

希望在下个版本中inlineNav的代码可以扩展为同时支持两个pager。

更新:我忘了说,我修正了文本相对于导航栏中图标的一点位置。这不是您问题的主要主题,但您可能也会感兴趣:

.ui-jqgrid .ui-jqgrid-toppager .ui-pg-div 
    margin-top: 2px;
    padding-right: 5px;

.ui-jqgrid .ui-jqgrid-toppager .ui-pg-div span.ui-icon 
    margin-top: -2px;

.ui-jqgrid .ui-jqgrid-pager .ui-pg-div 
    margin-top: 2px;
    padding-right: 5px;

.ui-jqgrid .ui-jqgrid-pager .ui-pg-div span.ui-icon 
    margin-top: -2px;

【讨论】:

【参考方案2】:

这有点笨拙,但为了快速获胜,我只是复制了 grid.inlinedit.js 中的代码,以便重新创建在顶部和底部栏中执行相同操作的按钮......它似乎有效。

            if(o.add) 
            $($t).jqGrid('navButtonAdd', elem,
                caption : o.addtext,
                title : o.addtitle,
                buttonicon : o.addicon,
                id : $t.p.id+"_iladd",
                onClickButton : function ( e ) 
                    $($t).jqGrid('addRow', o.addParams);
                    if(!o.addParams.useFormatter) 
                        $("#"+$t.p.id+"_top_ilsave").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_ilcancel").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_iladd").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_iledit").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_ilsave").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_ilcancel").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_iladd").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_iledit").addClass('ui-state-disabled');
                    
                
            );

            $($t).jqGrid('navButtonAdd', '#' + $($t)[0].id + '_toppager_left',
                caption : o.addtext,
                title : o.addtitle,
                buttonicon : o.addicon,
                id : $t.p.id+"_top_iladd",
                onClickButton : function ( e ) 
                    $($t).jqGrid('addRow', o.addParams);
                    if(!o.addParams.useFormatter) 
                        $("#"+$t.p.id+"_top_ilsave").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_ilcancel").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_iladd").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_iledit").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_ilsave").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_ilcancel").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_iladd").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_iledit").addClass('ui-state-disabled');
                    
                
            );

        
        if(o.edit) 
            $($t).jqGrid('navButtonAdd', elem,
                caption : o.edittext,
                title : o.edittitle,
                buttonicon : o.editicon,
                id : $t.p.id+"_iledit",
                onClickButton : function ( e ) 
                    var sr = $($t).jqGrid('getGridParam','selrow');
                    if(sr) 
                        $($t).jqGrid('editRow', sr, o.editParams);
                        $("#"+$t.p.id+"_ilsave").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_ilcancel").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_iladd").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_iledit").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_ilsave").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_ilcancel").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_iladd").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_iledit").addClass('ui-state-disabled');
                     else 
                        $.jgrid.viewModal("#alertmod",gbox:"#gbox_"+$t.p.id,jqm:true);$("#jqg_alrt").focus();                         
                    
                
            );

            $($t).jqGrid('navButtonAdd', '#' + $($t)[0].id + '_toppager_left',
                caption : o.edittext,
                title : o.edittitle,
                buttonicon : o.editicon,
                id : $t.p.id+"_top_iledit",
                onClickButton : function ( e ) 
                    var sr = $($t).jqGrid('getGridParam','selrow');
                    if(sr) 
                        $($t).jqGrid('editRow', sr, o.editParams);
                        $("#"+$t.p.id+"_ilsave").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_ilcancel").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_iladd").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_iledit").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_ilsave").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_ilcancel").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_iladd").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_iledit").addClass('ui-state-disabled');
                     else 
                        $.jgrid.viewModal("#alertmod",gbox:"#gbox_"+$t.p.id,jqm:true);$("#jqg_alrt").focus();                         
                    
                
            );


        
        if(o.save) 
            $($t).jqGrid('navButtonAdd', elem,
                caption : o.savetext || '',
                title : o.savetitle || 'Save row',
                buttonicon : o.saveicon,
                id : $t.p.id+"_ilsave",
                onClickButton : function ( e ) 
                    var sr = $($t).jqGrid('getGridParam','selrow');
                    if(sr) 
                        if($("#"+$.jgrid.jqID(sr), "#"+$.jgrid.jqID($t.p.id) ).hasClass("jqgrid-new-row")) 
                            var opers = $t.p.prmNames,
                            oper = opers.oper;
                            if(!o.editParams.extraparam) 
                                o.editParams.extraparam = ;
                            
                            o.editParams.extraparam[oper] = opers.addoper;
                        
                        $($t).jqGrid('saveRow', sr, o.editParams);
                        $("#"+$t.p.id+"_ilsave").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_ilcancel").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_iladd").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_iledit").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_ilsave").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_ilcancel").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_iladd").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_iledit").removeClass('ui-state-disabled');
                     else 
                        $.jgrid.viewModal("#alertmod",gbox:"#gbox_"+$t.p.id,jqm:true);$("#jqg_alrt").focus();                         
                    
                
            );
            $("#"+$t.p.id+"_ilsave").addClass('ui-state-disabled');

            $($t).jqGrid('navButtonAdd', '#' + $($t)[0].id + '_toppager_left',
                caption : o.savetext || '',
                title : o.savetitle || 'Save row',
                buttonicon : o.saveicon,
                id : $t.p.id+"_top_ilsave",
                onClickButton : function ( e ) 
                    var sr = $($t).jqGrid('getGridParam','selrow');
                    if(sr) 
                        if($("#"+$.jgrid.jqID(sr), "#"+$.jgrid.jqID($t.p.id) ).hasClass("jqgrid-new-row")) 
                            var opers = $t.p.prmNames,
                            oper = opers.oper;
                            if(!o.editParams.extraparam) 
                                o.editParams.extraparam = ;
                            
                            o.editParams.extraparam[oper] = opers.addoper;
                        
                        $($t).jqGrid('saveRow', sr, o.editParams);
                        $("#"+$t.p.id+"_ilsave").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_ilcancel").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_iladd").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_iledit").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_ilsave").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_ilcancel").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_iladd").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_iledit").removeClass('ui-state-disabled');
                     else 
                        $.jgrid.viewModal("#alertmod",gbox:"#gbox_"+$t.p.id,jqm:true);$("#jqg_alrt").focus();                         
                    
                
            );
            $("#"+$t.p.id+"_top_ilsave").addClass('ui-state-disabled');
        
        if(o.cancel) 
            $($t).jqGrid('navButtonAdd', elem,
                caption : o.canceltext || '',
                title : o.canceltitle || 'Cancel row editing',
                buttonicon : o.cancelicon,
                id : $t.p.id+"_ilcancel",
                onClickButton : function ( e ) 
                    var sr = $($t).jqGrid('getGridParam','selrow');
                    if(sr) 
                        $($t).jqGrid('restoreRow', sr, o.editParams);
                        $("#"+$t.p.id+"_ilsave").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_ilcancel").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_iladd").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_iledit").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_ilsave").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_ilcancel").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_iladd").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_iledit").removeClass('ui-state-disabled');
                     else 
                        $.jgrid.viewModal("#alertmod",gbox:"#gbox_"+$t.p.id,jqm:true);$("#jqg_alrt").focus();                         
                    
                
            );
            $("#"+$t.p.id+"_ilcancel").addClass('ui-state-disabled');

            $($t).jqGrid('navButtonAdd', '#' + $($t)[0].id + '_toppager_left',
                caption : o.canceltext || '',
                title : o.canceltitle || 'Cancel row editing',
                buttonicon : o.cancelicon,
                id : $t.p.id+"_top_ilcancel",
                onClickButton : function ( e ) 
                    var sr = $($t).jqGrid('getGridParam','selrow');
                    if(sr) 
                        $($t).jqGrid('restoreRow', sr, o.editParams);
                        $("#"+$t.p.id+"_ilsave").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_ilcancel").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_iladd").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_iledit").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_ilsave").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_ilcancel").addClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_iladd").removeClass('ui-state-disabled');
                        $("#"+$t.p.id+"_top_iledit").removeClass('ui-state-disabled');
                     else 
                        $.jgrid.viewModal("#alertmod",gbox:"#gbox_"+$t.p.id,jqm:true);$("#jqg_alrt").focus();                         
                    
                
            );
            $("#"+$t.p.id+"_top_ilcancel").addClass('ui-state-disabled');
        

【讨论】:

这与我在回答中建议的大致相同。我认为只有一个人不应该总是在'#' + $($t)[0].id + '_toppager_left' 中添加按钮。已经有参数elem。我只会在elem 寻呼机中添加按钮,但我会使用从idelem 构造的ID。此外,我会对iladdiledit 等按钮使用其他类,然后禁用或启用按钮的代码可以更短。我还将使用一些其他规则来构造按钮的 id,以使其与 inlineNav 添加的按钮不会发生冲突。 如果您更新问题的文本,如果您再发布一个答案,请对我的答案发表简短评论。只有在这种情况下我才会收到通知。

以上是关于jqgrid inlineNav cloneToTop?的主要内容,如果未能解决你的问题,请参考以下文章

jqgrid rows怎么设置

jqgrid rows怎么设置

jqgrid rows怎么设置

jqgrid 最近在用jqgrid,我想要实现列的拖拽功能,请问有人实现过吗

jqgrid传递查询条件,后台接收数据

获取jqgrid有多条行数据