2010-12-08 2 views
25

Я внедрил следующий код для загрузки фотографий в диалоговом окне jQuery (с использованием iframe).Закрыть jQuery UI Dialog from Iframe

Вот IFrame

<div style="display: none"> 
    <iframe id="upload-form" frameborder="0" marginheight="0" marginwidth="0" src="Upload.aspx"></iframe> 
</div> 

А вот код JQuery на родительской странице, которая заботится об открытии диалогового окна.

$("#upload-image").click(function (e) { 
    e.preventDefault(); 
    $('#upload-form').dialog({ 
     modal: true, 
     width: 300, 
     title: "Upload Image", 
     autoOpen: true, 
     close: function(event, ui) { $(this).dialog('close') } 
    }); 
}); 

Я затем нагнетаю скрипт (на странице IFrame) после загрузки успешно, который проходит результат обратно в родительской странице, но я хочу, чтобы закрыть диалоговое окно одновременно.

$(document).ready(function() { 
    $(parent.document).find('#imagePathValue').val('theimagevalue'); 
    $(parent.document).find('#upload-form').dialog('close'); 
}); 

The #imagePathValue проходит успешно, но я не могу показаться, чтобы иметь возможность закрыть диалоговое окно.

Любые идеи?

ответ

39

Для того, чтобы заставить его работать, вы должны вызвать Jquery от родителя, а не внутри фрейма. Для этого используйте следующие ...

window.parent.jQuery('#upload-form').dialog('close'); 

Это должно быть сделано!

+0

Вот и все, спасибо, спасибо! :) – Marko 2010-12-08 21:35:35

5

Попробуйте это:

$(document).ready(function() { 
    $(parent.document).find('#imagePathValue').val('theimagevalue'); 
    window.parent.$('#upload-form').dialog('close'); 
}); 
+0

Я полагаю, что это работает так хорошо +1 – Marko 2010-12-08 21:36:06

+0

Оба ответа одинаковы, так что да. – 2010-12-08 21:44:31

2

В дополнение к этому вы также должны сделать это:

window.parent.$('#upload-form').remove(); 

поэтому экземпляр Iframe удаляется после закрытия диалога.

так Окончательный код должен быть:

$(document).ready(function() { 
    $(parent.document).find('#imagePathValue').val('theimagevalue'); 
    window.parent.$('#upload-form').dialog('close'); 
    window.parent.$('#upload-form').remove(); 
}); 

Благодаря Kaushal

-1

Определенно помните, что называть эти типы функций, он должен обратиться к функции в самом родительском документе. Когда вы используете второй аргумент конструктора jquery, вы указываете только цель метода, а не где его выполнять.

Именно поэтому $('element', window.parent.document).method(); не будет работать, и window.parent.jQuery('element').method(); будет.