【问题标题】:jQueryUI dialog scrolls to top when clicking close button in IE单击 IE 中的关闭按钮时,jQueryUI 对话框滚动到顶部
【发布时间】:2014-04-04 13:57:44
【问题描述】:

如果对话框部分位于页面外,单击对话框标题栏会导致 IE 将页面滚动到对话框顶部。但是,如果用户也单击关闭按钮,也会发生这种情况。这意味着用户必须点击两次关闭按钮。

$('#divDialog').dialog({height:500, position:[10, 1000]});

我创建了一个 jsfiddle 来演示: http://jsfiddle.net/e9zAK/

重新定位对话框,直到它部分离开屏幕。然后尝试单击关闭按钮。它将滚动页面以适应,但实际上不会关闭对话框。这似乎不会在 Firefox 或 Chrome 中发生。

有没有办法覆盖这个功能?我不想使用 position:fixed。

【问题讨论】:

    标签: jquery-ui internet-explorer jquery-ui-dialog


    【解决方案1】:

    更多的是 IE 的奇怪之处。它发送 mousedown 事件,但不发送 mouseup,因此不发送 click 事件。我不知道是什么原因造成的,但是您可以通过将侦听器绑定到 mousedown 来解决它:

    $('.ui-dialog-titlebar-close').mousedown(function() {
        $('#divDialog').dialog('close');
    });
    

    这看起来有点讨厌,但这些似乎是处理 IE 时的常用方法。

    【讨论】:

    • 感谢您找到根本原因,但这似乎并没有阻止它。 (jsfiddle.net/e9zAK/1)。我也会继续挖掘。
    • 您的小提琴顺序错误。将其放在调用.dialog() 之后,或者使用事件委托:jsfiddle.net/blgt/e9zAK/2
    【解决方案2】:

    我来这里是因为我遇到了类似的问题。在我的情况下,它发生在 Chrome(53.0.2785.143 m,Windows)中,并在单击标题栏中的按钮时触发,当页面及其对话框向下滚动一些(或几个)像素时导致跳转顶部,将其再次放置到窗口顶部,并且不触发按钮应该执行的操作。

    经过一番调查,主要是借助 Chrome js 调试器本身,我在ui-dialog-titlebar 上找到了一个事件侦听器,它对应于对话框标题栏,并由mousedown 事件触发(有关 circa 行的更多信息9161,文件jquery-ui.js,jQuery UI v1.9.2;可能在更新的版本中已解决)。之后很明显,删除处理程序可以解决问题,我在对话框初始化代码中的open 事件中这样做了:

    $(".selector").dialog({
        open: function(event,ui){
            $(this).parent().find('.ui-dialog-titlebar').unbind('mousedown');
        }
    })
    

    请注意,如果您有一些与标题栏相关的拖动操作,这可能会干扰。

    【讨论】:

    • 完美,终于为我解决了这个问题。幸运的是,标题栏没有任何 ondrag 事件..
    猜你喜欢
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 2012-10-25
    • 2013-04-06
    • 1970-01-01
    • 2019-05-16
    • 2014-11-24
    • 2021-05-04
    相关资源
    最近更新 更多