2008-09-16 16 views
4

Ich habe eine modal dialog Form, die einige "Hilfe-Links" enthält, die andere nicht-modale Panels oder Dialoge darüber öffnen sollten (während der Hauptdialog ansonsten modal gehalten wird) .Problem mit einem modalen Dialog zum Öffnen eines sekundären Dialogs

Diese enden jedoch immer hinter der Maske. YUI scheint die höchste z-index da draußen zu erkennen und die Maske und den modalen Dialog höher zu setzen.

Wenn ich warte, um den Hilfeinhalt zu panelisieren, dann kann ich diese auf einen höheren Z-Index setzen. So weit, ist es gut. Das Problem besteht dann darin, dass Felder innerhalb der sekundären, nicht-modalen Dialoge unfokussierbar sind. Der modale Dialog unter ihnen scheint irgendwie zu verhindern, dass der Fokus auf etwas geht, das nicht im ursprünglichen modalen Dialog steht.

Es wäre auch akzeptabel, wenn ich diese "Dialoggruppenmodalität" mit jQuery machen könnte, wenn YUI dies einfach nicht erlauben würde.

Hilfe!

Antwort

4

Standardmäßig verwaltet YUI den Z-Index von allem, was YAHOO.widget.Overlay erweitert und ein Overlay-Panel verwendet. Dies geschieht durch die Methode "bringToTop" von YAHOO.widget.Overlay.

YAHOO.widget.Overlay.prototype.bringToTop = function() { }; 

Dieser Code würde schalten Sie es aus für gut und man konnte dies nur am Boden setzen der container.js-Datei: Sie können dies durch einfaches Ändern der „bringToTop“ Methode, um eine leere Funktion auszuschalten. Ich finde diesen Ansatz ein wenig zu viel von einem Vorschlaghammer Ansatz sein, so dass wir verlängern die Klassen YUI und „super.constuctor“ schreibt nach dem Aufruf:

this.bringToTop = function() { }; 

Wenn Sie dies tun, Sie sind im Wesentlichen YUI erzählen dass Sie die Z-Indizes Ihrer Elemente selbst verwalten. Das ist wahrscheinlich in Ordnung, aber etwas zu überlegen, bevor Sie es tun.

0

Der ursprüngliche Dialog kann nicht modal sein, wenn der Benutzer mit anderen Elementen interagieren soll - das ist die Definition von modal. Muss der ursprüngliche Dialog wirklich Modal überhaupt sein? Wenn ja, haben Sie versucht, die modale Eigenschaft des ursprünglichen Dialogs zu ändern, bevor Sie die anderen Elemente öffnen?

+0

Das würde alle anderen Hintergrundelemente auch zugänglich machen. Ich muss den Zugriff auf alles außer diesem Satz von drei Dialogen (1 primär, 2 sekundär) blockieren. Ich kann ihnen nicht erlauben, etwas anderes zu tun, bis der primäre Dialog erfolgreich abgeschlossen ist. –

+0

Dann denke ich, dass Sie vielleicht das JavaScript schreiben müssen, um die Quasi-Modalität selbst durchzusetzen; Es ist nichts, was ich in einer der Dokumente beschrieben habe. –

Verwandte Themen