jqGrid重新定位删除确认框

时间:2011-04-19 16:18:30

标签: jquery jqgrid

我目前正在使用带有navGrid的jqGrid,del设置为true。问题是当用户点击删除时,它会弹出网格左上角的确认框。由于我们已经向下滚动到底部,我有一个很大的高度,用户必须一直到顶部确认。有没有办法移动这个位置?手动偏移很好,但理想情况下我想将它停靠在左下角,就像左上方一样。

提前致谢

(如果这是一个骗局,我很抱歉。我试着发布它,但它给了我一些奇怪的错误,并没有在我的历史中显示,所以假设它没有发布。)

2 个答案:

答案 0 :(得分: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上测试删除对话框的建议移动。

答案 1 :(得分: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则无需精确。

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