jQueryUI 对话框滚动位置重置为另一个对话框的焦点

标签 jquery jquery-ui scrollbar

问题:

当使用多个标准 jQueryUI 对话框实例化时,如下所示:

$("#dialog").dialog({});
$("#dialog2").dialog({});

如果有大量内容或设置了特定高度导致滚动条,在滚动到其中后,然后聚焦相反的对话框,滚动条位置将在第一个与之交互的对话框(或其中的所有其他对话框)上重置3 个或更多对话框的情况)。

相关问题的演示:

http://jsfiddle.net/Drath/yGL22/

重现步骤:

  1. 在一个对话框内滚动。
  2. 单击相反的对话框。
  3. 滚动条位置将在第一个滚动的对话框中重置。

附加:

正在寻找可能的解决方法,因为这似乎是一个错误。我无法使用任何选项/方法/事件组合来找到解决此问题的方法。这似乎发生在焦点事件之前,因此我无法找到使用该事件的解决方法。

最佳答案

能够在搜索查询中使用“_moveToTop”找到解决方案。此处找到了针对此问题的官方错误通知单:http://bugs.jqueryui.com/ticket/9166

它已在即将发布的 jQueryUI 版本 1.11.0 中修复。如果您在 jQueryUI 版本 1.10.4 或更低版本上运行时遇到此问题,解决方法如下:

加载 jQueryUI 后,通过加载以下代码覆盖 _moveToTop 函数:

$.widget('ui.dialog', $.ui.dialog, { _moveToTop: function( event, silent ) {
    var $parent = this.uiDialog.parent();
    var $elementsOnSameLevel = $parent.children();

    var heighestZIndex = 0;
    $.each($elementsOnSameLevel, function(index, element) {
        var zIndexOfElement = $(element).css('z-index');
        if (zIndexOfElement) {
            var zIndexOfElementAsNumber = parseInt(zIndexOfElement) || 0;
            if (zIndexOfElementAsNumber > heighestZIndex) {
                heighestZIndex = zIndexOfElementAsNumber;
            }
        }
    });
    var currentZIndex = this.uiDialog.css('z-index');

    var moved;
    if (currentZIndex >= heighestZIndex) {
        moved = false;
    } else {
        this.uiDialog.css('z-index', heighestZIndex + 1);
        moved = true;
    }

    if ( moved && !silent ) {
        this._trigger( "focus", event );
    }

    return moved;
}});

通过该票证将积分转给用户 joern.zaefferer。

关于jQueryUI 对话框滚动位置重置为另一个对话框的焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21666590/

相关文章:

php - HTML/JQuery 表单未发布到 PHP

javascript - 为什么 CSS 在本地和远程网站上的工作方式不同?

javascript - 在运行时创建 Bootstrap Modal 加载 Javascript

jquery - 带有 jQ​​uery UI DatePicker 值的 ASP.NET 文本框在回发时丢失

jquery - 如何实现这样的悬停效果

javascript - 使用 devexpress 在 IE 上滚动条

javascript - 仅通过 JS 禁用滚动

html - 未知高度列的垂直滚动条

javascript - 使用 jquery 显示旋转菜单 - 不是典型的菜单

jquery - jQuery .removeClass() 没有做任何事情的奇怪问题