【问题标题】:jqGrid warning please select row positionjqGrid警告请选择行位置
【发布时间】:2012-07-30 10:09:39
【问题描述】:

有没有办法将对话框消息“请选择行”定位在所选网格的左上角?

我只希望在警报警告中具有相同的行为,就像编辑和删除表单一样..

这个主题解决方案对我不起作用.. JQGrid position of the AlertMod warning message

我在同一页面中有 3 个网格,如果您单击最后一个网格的一行,警告消息会出现在页面顶部,并且用户无法察觉...

谁能帮帮我?

提前致谢

解决方案:

var orgViewModal = $.jgrid.viewModal;

$.extend($.jgrid, {
    viewModal: function (selector, o) {
        if (selector === '#alertmod') {
            var $gbox = $(o.gbox), $selector = $(selector);
            var of = $gbox.offset(), w = $gbox.width(), h = $gbox.height(); 
            var w1 = $selector.width(), h1 = $selector.height();
            $selector.css({
                'top': of.top + ((h-h1)/2),
                'left': of.left + ((w-w1)/2)
            });
        }
        orgViewModal.call(this, selector, o);
    }
});

对于其他感兴趣的人,这个解决方案对我有用。仅更改警报框的位置,并保持其他所有内容相同。

【问题讨论】:

  • 它对我不起作用,即使我只写 $selector.css({top: 100,left: 100});我只有默认定位。我的表格的高度大于窗口的高度,但据我了解,警报窗口的初始化是在 gridComplete 和数据加载之前完成的,因此它在窗口中心的位置而不需要滚动。我还在寻找解决方案。

标签: jquery jqgrid


【解决方案1】:

如果我理解正确您的问题,您可以使用navGridalerttopalertleft 选项。参数可以包含在navGridparameters 选项中。 The answer 描述了navGrid 的另一种未记录的选项。

【讨论】:

  • 我意识到这个解决方案允许您配置警报框的位置,但我无法动态获取每个网格的位置。如果我在同一页面上有 4 或 5 个网格,我必须为每个网格设置固定位置,并且无法动态执行此操作,因为它出现在编辑表单中。对?我唯一想要的是警告消息出现在编辑表单的同一位置。 (对不起我的英语不好)
  • @PauloPinto:你是对的。 alerttopalertleft 的值是静态的,如果您使用带有 height: "auto" 的网格,则不能很好地设置。在这种情况下,我看到解决问题的两种主要方法:1)使用navButtonAdd 添加看起来像原始按钮的自定义按钮。在这种情况下,您可以获取selrowselarrrow 参数来验证是否选择了任何行并显示您的自定义消息。 2)您可以覆盖(子类)原始$.jgrid.viewModal方法并设置自己的实现,仅更改位置并调用原始方法。
  • @PauloPinto:查看the answer 以了解如何继承 jqGrid 方法的示例。您可以使用$.extend($.jgrid,{viewModal: : function (selector,o){...}}); 继承$.jgrid.viewModal 方法。
  • 谢谢。第二种解决方案正是我所需要的。但是我仍然有一个问题,在我更改模态的位置后,我无法正确调用默认行为。 $.extend($.jgrid,{ viewModal: function (selector,o){ var p = jQuery(o.gbox).position(); $(selector).css({ 'top':p.top, 'left ':p.left }); //默认继续,如果在这一行我写了一个 // $(selector).show() //对话框警告显示在我想要的位置... } });
  • @PauloPinto:您应该首先将$.jgrid.viewModal 的原始实现保存在一个变量中:var orgViewModal = $.jgrid.viewModal;。然后您可以在viewModal 的实施结束时使用orgViewModal.call(this, selector, o);
【解决方案2】:

看看这个答案

http://www.ok-soft-gmbh.com/jqGrid/CenterEditForm.htm

你需要改变你的 beforeShowForm 事件

或者你可以在 afterShowform 事件上实现这个功能

function centerForm ($form) {
                    $form.closest('div.ui-jqdialog').position({
                        my: "center",
                        of: $('#grid').closest('div.ui-jqgrid')
                    });
                    }

【讨论】:

  • 我认为这行不通,因为当我没有选择行时,我想修改警告消息的位置。我的事件 beforeShowForm,afterShowform 仅在我选择行时触发。
  • 打开链接并点击编辑,不选择任何行,你就会知道我在说什么
  • 我只是尝试过,但不起作用.. 只能打开编辑表单,但如果我不选择一行,警告消息将保持在同一位置。
  • 那些链接选择了一行,并且没有选择行......这个解决方案对我有用的是警报消息的行为与编辑表单相同..
【解决方案3】:

正如我在评论中写的那样,我有一张长桌子,我需要警报窗口始终位于视口的中心。 所以我需要动态定位警报窗口。 我需要在用户向下滚动页面并单击“编辑”或“删除”后设置位置。

据我了解,Nav 没有警报模式窗口的“beforeShowForm”或“beforeShowSearch”等事件。 我也无法在寻呼机上点击。

Oleg 和 Paulo Pinto 提供的解决方案对我不起作用。我不知道为什么。 我什至不明白它是如何工作的:)

所以我找到了自己的直...不是很好的方式。

loadComplete: function(){
    $(window).scroll(function() {
        $('#alert_window_id').center();
    });
}

“center()”在哪里

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;
}

在 loadComplete 之后,警报 div 似乎已经存在,并且网格有它的全高,所以窗口滚动也存在。 因为我没有点击“编辑”按钮或显示警报对话框的事件 - 我在每次滚动事件后重新定位警报对话框。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多