在IE中单击关闭按钮时,jQueryUI对话框滚动到顶部

时间:2014-04-04 13:57:45

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:6)

更多IE的陌生感。它发送mousedown事件,但不发送mouseup,因此不发送click事件。我不知道是什么导致这种情况,但你可以通过将监听器绑定到mousedown来解决它:

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

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

答案 1 :(得分:2)

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

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

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

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