2009-12-24 23 views
15

Mam witrynę internetową, która używa elementu iframe. Sam element iframe jest treścią witryny. Teraz w iframe chciałbym użyć okna dialogowego jQuery. Jednak podczas korzystania z niego nakładka i okno dialogowe są wyświetlane tylko wewnątrz elementu iframe, a nie w elemencie nadrzędnym. Mój rodzic ma następujący html html zdefiniowany dla okna:Wyświetl okno dialogowe jquery w oknie nadrzędnym

<div id="modalHolder"></div> 

W moim iframe używam następujący skrypt do tworzenia okna i pokazać.

dlg1 = $(window.parent.document.getElementById("modalHolder")); 
dlg1 = dlg1.dialog({ 
    width: 300, 
    height: 150, 
    modal: true, 
    autoOpen: false, 
    resizable: false, 
    closeOnEscape: false, 
    draggable: false, 
    overlay: 
    { 
     backgroundColor: 'red', 
     opacity: 0.65 
    }, 
    open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); } 
}); 

Aby wyświetlić okno Używam tego:

dlg1.dialog('open'); 

Odpowiedz

3

Ponieważ funkcja dialogowe jest uruchomione w ramach iframe, zawsze będzie tworzyć DIV dialogowych (jak pół przezroczyste tło div i dialog div) jako dzieci iframe. Mimo że pobierasz element z dokumentu nadrzędnego, rzeczywisty skrypt nadal działa w elemencie iframe. Jeśli masz Firefoksa i Firebuga, powinieneś być w stanie użyć kontrolera HTML, aby zobaczyć, co się dzieje.

mogę myśleć tylko z dwóch rozwiązań:

  1. pomocą zmodyfikowanej wersji biblioteki jQuery dialogowym. Nie polecam tego w ogóle
  2. Przenieś JavaScript tak, aby był wykonywany w kontekście dokumentu nadrzędnego.
+0

Właściwie możesz być w stanie przenieść elementy dialogowe z elementu iframe do dokumentu nadrzędnego po ich utworzeniu, ale byłoby to naprawdę brzydkie. Coś jak ... # (".ui-widget-overlay, ui-dialog"). AppendTo (window.parent.document.body); – CalebD

+1

Masz rację. Wygląda na to, że przenosi "modalHolder" z rodzica na element iframe. Przeniesię moje js z dziecka na rodzica. Próbowałem tego uniknąć. W każdym razie dzięki! – vikasde

+0

Mogłem przenieść elementy do rodzica, jednak ich wysokość/szerokość musiałaby zostać ponownie obliczona. – vikasde

26

Jest prosty i wdzięku rozwiązanie:

  1. Dołącz jQuery i jQueryUI do swojego okna nadrzędnego
  2. Po tym można uzyskać dostęp do nadrzędnego JQuery obiektu wewnątrz iframe

Na przykład :

var $jParent = window.parent.jQuery.noConflict(); 
var dlg1 = $jParent('#modalHolder'); 
dlg1.dialog(); 
+0

, dzięki któremu moje życie stało się o wiele łatwiejsze. – Christian

+0

jedno dobre rozwiązanie :) – Roylee

+0

+1, ale chciałbym przegłosować znacznie więcej, gdybym mógł! To powinna być zaakceptowana odpowiedź. –

Powiązane problemy