2011-04-19 99 views
7

我目前使用jgGrid与navGrid,del设置为true。问题是当用户点击删除时,它弹出网格左上角的确认框。由于我们已经滚动到底部,我有一个很大的高度,用户必须一直到顶部确认。有什么办法可以改变这个位置吗?手动偏移很好,但理想情况下,我想将它停靠在左下方,如左上方所示。jqGrid重新定位删除确认框

在此先感谢

(如果这是欺骗我很抱歉。我尝试了发布,但它给了我一些奇怪的错误,在我的历史没有显示这样假定它没有张贴。)

回答

9

我觉得不是一个骗局。在相反的情况下,我觉得很好,所以+1。

jqGrid内部使用方法viewModal$.jgrid.viewModal),它显示最多的对话框。该方法有toTop参数,但delGridRoweditGridRow不会使用它,它将设置为toTop:true。因此,添加,编辑和删除对话框将始终显示在网格的顶部,该网格可位于可调区域内。

要解决这个问题,你可以定义改变对话框位置的事件句柄afterShowForm。例如

$("#list").jqGrid('navGrid','#pager', {}, {}, {}, 
        { 
         afterShowForm: function($form) { 
          var dialog = $form.closest('div.ui-jqdialog'), 
           selRowId = myGrid.jqGrid('getGridParam', 'selrow'), 
           selRowCoordinates = $('#'+selRowId).offset(); 
          dialog.offset(selRowCoordinates); 
         } 
        }); 

在示例中,对话将被放置在所选的行上。当最后一行中的选定行和对话框的底部位于窗口之外时,可以改进代码。不过,上面的实现看起来比默认的更好,因为用户在他想要删除的行上正好看到对话框,并且他可以移动对话框以便它完全可见。

您可以在the live demo上测试删除对话框的建议移动。

+0

我还没有将其添加到我的编码中,但通过演示它似乎是我需要的。非常感谢! – 2011-04-19 18:03:08

+0

该演示似乎不再适用。该表格仍然弹出到最上面。我错过了什么吗? – devXen 2014-05-23 16:50:41

+0

@Chensformers:你用来测试哪个网页浏览器?尝试再次复制您的测试:1)打开演示; 2)选择靠近网格底部的一行,以便您可以看到导航栏(例如,选择行号290)3)单击“删除”按钮4)确认显示“删除”对话框**所选行**(在行号290下)。如果没有在我的答案中使用'afterShowForm',那么删除对话框将显示在网格的顶部,而不是在选定的行下。 – Oleg 2014-05-23 19:48:27

7

找到了更好的here

在你的JavaScript库补充一点:

jQuery.fn.center = function() { 
    this.css("position","absolute"); 
    this.css("top", ($(window).height() - this.height())/2+$(window).scrollTop() + "px"); 
    this.css("left", ($(window).width() - this.width())/2+$(window).scrollLeft() + "px"); 
    return this; 
} 

现在你只需要在afterShowForm属性补充一点:

afterShowForm: function(form) { 
    form.closest('div.ui-jqdialog').center(); 
} 

form.closest( 'div.ui-jqdialog')= >允许你获得模态弹出窗口,如果是editForm或deleteForm,则无需精确。

此代码将弹出窗口放置在屏幕中央,因此如果您的网格非常大,则不必滚动。