2014-02-12 2 views
7

Wenn auf einer Seite mehrere jQuery-UI-Dialogfelder mit genügend Inhalt zum Erzwingen einer Bildlaufleiste geöffnet sind, wird beim Klicken zwischen Dialogen der Inhalt des aktiven Bildlaufs angezeigt oben.jQuery UI mehrere Dialogfeldinhalte nach oben springen

Sie können diese JSFiddle für ein Beispiel sehen (ein Kasten hintereinander ist): http://jsfiddle.net/kRAd4/ Wenn Sie sie beide ein wenig nach unten scrollen und dann von einem Feld zum anderen klicken Sie es passieren, werden sehen.

Gibt es eine Möglichkeit, dies zu stoppen?

Hier ist der Code auf der Website JSFiddle verwendet, dann ist es einfach:

HTML:

<div class="hi">Here<br />Is<br />A<br />Lot<br />Of<br />Text<br />Here<br />Is<br />A<br />Lot<br />Of<br />Text<br />Here<br />Is<br />A<br />Lot<br />Of<br />Text<br />Here<br />Is<br />A<br />Lot<br />Of<br />Text<br /></div> 

<div class="hi">Here<br />Is<br />A<br />Lot<br />Of<br />Text<br />Here<br />Is<br />A<br />Lot<br />Of<br />Text<br />Here<br />Is<br />A<br />Lot<br />Of<br />Text<br />Here<br />Is<br />A<br />Lot<br />Of<br />Text<br /></div> 

Javascript:

$(".hi").dialog({ 
    height: 200 
}); 

UPDATE: Ich habe return false sowohl versucht, indem die mouseDown und focus Dialogoptionen, und es machte keinen Unterschied.

Antwort

3

Genau wie Jared, habe ich diese Seite gefunden, die den Fehler beschreibt, den Sie haben. Es geht in der Tat um 1.9.2 funktioniert gut.

Die meiste Zeit werden jedoch keine Rollbacks zu früheren Versionen Ihres Projekts ausgeführt, und ich wollte eine Lösung finden, die Ihre aktuellen Dateien enthält. Daher habe ich mit etwas Code getestet, der dort präsentiert wird. Ich habe eine HTML-Seite mit Ihrer jQuery 2.0.2 Version und jQuery UI 1.10.3 Version erstellt.

Die folgende Lösung behebt Ihr Problem, aber ich würde es nur verwenden, wenn Sie sicher sind, dass es keine weiteren Auswirkungen gibt, oder wenn Sie es getestet haben und mit dem Ergebnis zufrieden sind. Ich suchte überall, aber didn -

_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; 
}, 
+0

Danke, Omri - ich werde es am Montag versuchen, wenn ich wieder an die Arbeit bin. –

+0

Sir, das hat gut funktioniert, und ich würde Ihnen gerne einen Drink kaufen, aber das wird wahrscheinlich nicht passieren. Bitte akzeptieren Sie 100 E-Punkte an seiner Stelle. –

+0

@Grim ... lol, froh, dass es geklappt hat, Kumpel. –

3

Es sieht aus wie ein Fehler in jquery UI 1.10, gemeldet here. Wenn Sie jQuery in 1.9.1 und jquery in 1.9.2 ändern, funktioniert es. Laut dem Fehlerbericht ist es auch in 1.11 behoben.

+0

Dank Jared:

ich die _moveToTop Funktion in der jQuery UI-Datei (die gesamte Chunk) mit diesem Stück Code ersetzt (Sie es in dem gleichen Link here finden) verwende natürlich nicht die richtige Wortkombination! –