2014-02-09 39 views
2

問題:上的焦點jQueryUI的對話框滾動位置重置另一個對話框

當使用多個標準jQueryUI的對話框實例,如:

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

如果有實質性的內容或特定高度已被設置爲導致一個滾動條,在滾動它後,然後聚焦相反的對話框,滾動條位置將在第一個與其交互的對象(或者在3個或更多對話框的情況下爲所有其他對話框)重置。所涉問題的

演示:

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

重現步驟:

  1. 滾動裏面一個對話框。
  2. 點擊相反的對話框。
  3. 滾動條位置將在第一個滾動的對話框中重置。

附加:

尋找可能的解決辦法,因爲這似乎是一個錯誤。我無法使用任何選項/方法/事件組合來找到解決方法。這似乎發生在焦點事件之前,所以我無法找到使用該事件的工作。

回答

1

能夠在搜索查詢中使用「_moveToTop」查找解決方案。這裏發現的這個問題有一個正式的Bug票: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通過該票證。