Модальное диалоговое окно jQuery не закрывается из iFrame - PullRequest
4 голосов
/ 22 января 2012

У меня есть модальное диалоговое окно jQuery с iFrame, которое показывает некоторый контент. Когда пользователь выбирает параметр в iFrame, я выполняю Ajax-вызов, а затем хочу закрыть диалоговое окно, однако оно не закрывается для меня.

В родительской форме у меня есть тег div:

div id="structureDialog" title="Add Structure"

Я открываю диалоговое окно, когда пользователь нажимает элемент на родительском элементе:

// bind an onclick event onto tiles to display the modal dialogue window
$(".stationTile").bind('click', function () {
    var src = "<iframe src="myurl" />";
    var locationID = 1;
    $("#structureDialog").attr("locationID", locationID);
    $("#structureDialog").html(src);  //iframe
    $("#structureDialog").dialog({
        modal: true,               
    });    
});

В моем iFrame есть следующее:

$(".userOption").bind('click', function () {
    $.ajax({
        async: false,
        type: "POST",
        url: "/NewStructure.aspx/Build",   
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: buildSuccess
    });
});

function buildSuccess(res, dest) {
    $("body", window.parent.document).attr("style", "background-color:yellow;");
    $("#structureDialog", window.parent.document).attr("style", "background-color:red;");
    $("#structureDialog", window.parent.document).dialog('close');
}

В моей функции buildSuccess я могу успешно изменить свое диалоговое окно на красный. Однако функция закрытия не закрывает мое диалоговое окно. Из большинства примеров, которые я видел до сих пор, этот код должен работать нормально, поэтому я в тупике.

Ответы [ 2 ]

6 голосов
/ 24 января 2012

Как я писал в комментарии выше, решение связано с экземпляром jquery, который выполняется. Когда объект диалога создан, он находится в контексте экземпляра jquery родительской формы. В iFrame создается второй экземпляр jquery, и, следовательно, диалоговое окно находится за пределами области действия.

Вызов $("#structureDialog", window.parent.document).dialog('close'); ищет DOM родителя, используя локальный экземпляр jquery, и, поскольку диалоговое окно там не было инициализировано, его нельзя закрыть там.

Решение состоит в том, чтобы сослаться на экземпляр jquery родительского элемента, переставив термины следующим образом:

parent.$("#structureDialog").dialog('close');

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

Престижность chrismarx1 на этом посте, который указал мне на это решение: http://forum.jquery.com/topic/trigger-from-iframe-to-parent-window

1 голос
/ 23 января 2012

попробуй

$("#structureDialog", window.opener.document).dialog('close');
...