jQuery模式对话框拳击没有从iFrame关闭

时间:2012-01-22 19:52:24

标签: jquery ajax iframe modal-dialog jquery-ui-dialog

我有一个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 个答案:

答案 0 :(得分:6)

正如我在上面的评论中所写,解决方案与运行jquery的实例有关。创建对话框对象时,它位于父窗体的jquery实例的上下文中。在iFrame中,创建了第二个jquery实例,因此对话框不在范围内。

调用$("#structureDialog", window.parent.document).dialog('close');使用jquery的本地实例搜索父项的DOM,因此,由于没有在那里初始化对话框,所以不能在那里关闭它。

解决方案是通过重新排列术语来引用父项的jquery实例,如下所示:

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

首先将上下文指向父级,然后使用父级的jquery实例查找对话框并将其关闭。

感谢Chrismarx1在这篇文章中向我指出了这个解决方案: http://forum.jquery.com/topic/trigger-from-iframe-to-parent-window

答案 1 :(得分:1)

尝试

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