【问题标题】:How to create a function to center windows如何创建使窗口居中的功能
【发布时间】:2013-02-05 17:55:53
【问题描述】:

我使用的是jqgrid,为了让弹出窗口集中添加、删除和编辑,我需要使用参数beforeShowForm,在这个显示窗口之前,显示屏幕的中心。问题是我必须始终为这三个函数执行相同的代码。

函数如下:

{ // edit option
  beforeShowForm: function(form) {
    var dlgDiv = $("#editmod" + $(this)[0].id);
    var parentDiv = dlgDiv.parent();
    var dlgWidth = dlgDiv.width();
    var parentWidth = parentDiv.width();
    var dlgHeight = dlgDiv.height();
    var parentHeight = parentDiv.height();
    var parentTop = parentDiv.offset().top;
    var parentLeft = parentDiv.offset().left;
    dlgDiv[0].style.top =  Math.round(parentTop / 2) + "px";
    dlgDiv[0].style.left = Math.round(parentLeft + (parentWidth-dlgWidth  )/2 )  + "px";
  }
},

为了重用相同的代码,我会创建一个单独的函数来始终编写相同数量的代码。我尝试创建以下函数:

功能:

function test(dlgDiv)
{
  var parentDiv = dlgDiv.parent();
  var dlgWidth = dlgDiv.width();
  var parentWidth = parentDiv.width();
  var dlgHeight = dlgDiv.height();
  var parentHeight = parentDiv.height();
  var parentTop = parentDiv.offset().top;
  var parentLeft = parentDiv.offset().left;
  dlgDiv[0].style.top =  Math.round(parentTop / 2) + "px";
  dlgDiv[0].style.left = Math.round(parentLeft + (parentWidth-dlgWidth  )/2 )  + "px";
}

在网格中:

{ // edit option
  beforeShowForm: function(form) {
    var dlgDiv = $("#editmod" + $(this)[0].id);
    test(dlgDiv);
  }
},

但继续没有放弃。表示未定义值 dlgDiv。有谁知道如何解决这个问题?

【问题讨论】:

  • 这是什么恐怖? $(this)[0].id?为什么不直接使用this.id???
  • 如果你给了我们完整的错误信息,或者至少是哪一行抛出了它。
  • @Kolink 因为我调用了网格的第一个参数 ;)
  • @gdoron 我会编辑以更好地理解

标签: javascript jqgrid


【解决方案1】:

问题在于您在此处使用的选择器:

var dlgDiv = $("#editmod" + $(this)[0].id);

您尝试获取的任何元素都不会被返回,因为选择器找不到它。您应该修改您的选择器以反映您尝试查找的元素的 ID。

如果您已经这样做了,但仍有问题,则问题出在您的上下文中,this 并不意味着您认为上面代码行中的含义。不过,在我详细说明之前,您必须向我们展示更多代码。

【讨论】:

    猜你喜欢
    • 2016-03-17
    • 2010-09-14
    • 1970-01-01
    • 2011-08-06
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    相关资源
    最近更新 更多