2009-12-24 6 views
15

У меня есть веб-сайт, в котором используется iframe. Сам iframe является содержимым веб-сайта. Теперь в iframe я хотел бы использовать диалог jQuery. Однако при его использовании наложение и диалог отображаются только внутри iframe, а не на родительском. Мой родительский HTML имеет следующий HTML, определенный для диалога:Отображение диалогового окна jquery в родительском окне

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

В моем IFRAME я использую следующий JavaScript, чтобы создать диалоговое окно и показать его.

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(); } 
}); 

Чтобы показать диалог, я использую это:

dlg1.dialog('open'); 

ответ

3

Поскольку окно функция работает в контексте фрейма, он всегда будет создавать диалоговые дивы (например, на полу прозрачного фона DIV и диалог div) как дочерние элементы iframe. Несмотря на то, что вы захватываете элемент из родительского документа, фактический скрипт все еще работает в iframe. Если у вас есть Firefox и Firebug, вы должны иметь возможность использовать инспектор HTML, чтобы узнать, что происходит.

я могу думать только из двух решений:

  1. Используйте модифицированную версию диалогового библиотеки JQuery. Я не рекомендую это вообще
  2. Переместите свой JavaScript так, чтобы он выполнялся в контексте родительского документа.
+0

Собственно, вы можете быть способный переместить диалоговые divs из iframe в родительский документ после их создания, но это было бы действительно уродливо. Что-то вроде .. # ('. Ui-widget-overlay, ui-dialog'). AppendTo (window.parent.document.body); – CalebD

+1

Вы правы. Похоже, он перемещает «modalHolder» из родителя в iframe. Я переведу свой js от ребенка к родительскому. Я пытался избежать этого. В любом случае спасибо! – vikasde

+0

Я мог бы переместить элементы в родительский, однако их высота/ширина нужно будет пересчитать. – vikasde

26

Существует простое и изящное решение:

  1. Включить JQuery и jqueryui в вашем родительском окне
  2. После этого вы можете получить доступ к родительскому объекту JQuery в пределах фрейма

Например :

+0

, что значительно облегчило мою жизнь. – Christian

+0

одно хорошее решение :) – Roylee

+0

+1, но я бы поднял гораздо больше, если бы мог! Это должен быть принятый ответ. –

Смежные вопросы