如果对话框部分偏离页面,则单击对话框标题栏会使IE将页面滚动到对话框的顶部。但是,如果用户也点击了关闭按钮,也会发生这种情况。这意味着用户必须两次单击关闭按钮。
$('#divDialog').dialog({height:500, position:[10, 1000]});
我创建了一个jsfiddle来演示: http://jsfiddle.net/e9zAK/
重新定位对话框,直到它部分离开屏幕。然后尝试单击关闭按钮。它将滚动页面以适合,但实际上不会关闭对话框。这似乎不会发生在Firefox或Chrome中。
有没有办法覆盖此功能?我不想使用position:fixed。
答案 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');
}
})
请注意,如果您有一些与标题栏相关的拖动操作,这可能会产生干扰。