使用<object>的jQuery对话框,无法从对象文档</object>中调用对话框(&#39; close&#39;)

时间:2014-11-19 16:42:26

标签: javascript jquery html dialog

我在网络应用程序中遇到以下情况。

单击链接时,会立即构建并打开一个对话框:

var dialogInitiator = $("<div id='dialog-initiator' style='background-color: "+bgcolor+";'>Loading...</div>");
dialogInitiator.appendTo(parentFrame);
dialogInitiator.dialog({
    modal:true,
    autoOpen: false
}).on('keydown', function(evt) {
    if (evt.keyCode === $.ui.keyCode.ESCAPE) {
        dialogInitiator.dialog('close');
    }
    evt.stopPropagation();
});
dialogInitiator.dialog('open');

在此之后,我将一个新的html页面加载到对话框中,并带有&lt;对象&gt;,像这样:

var objectFrame = $('<object style="border: 0;width:'+(dlwidth-30)+'px;min-height:'+(dlheight-46)+'px;" type="text/html" style="overflow:auto;" data="'+url+'"></object>');
dialogInitiator.html(objectFrame);

现在,&#34; url&#34;变量包含指向此新html文档的链接。当该页面准备就绪时,它将关注输入字段。这可以防止ESCAPE键关闭对话框。所以,我试图在转义按键上手动触发.dialog(&#39; close&#39;)事件。

我在加载的文档中执行以下操作:

  

$(&#39;#dialog-initiator&#39;,window.parent.document).dialog(&#39; close&#39;);

收到以下错误:

  

&#34;错误:在初始化之前无法调用对话框上的方法;试图调用方法&#39;关闭&#39;&#34;

奇怪的是,当我打电话时:

  

console.log($(&#39;#dialog-initiator&#39;,window.parent.document).html());   它向我展示了对话框中的html。所以它实际上已经启动了。

好吧,我试图在Google的帮助下修复此错误,但没有成功。我想我的情况非常具体。

注意:由于我们在modalDialogs中使用的旧功能,我们被迫使用该技术将整个网页加载到对话框中。由于它们是在最新的Google Chrome浏览器中删除的,因此我们使用jQuery对话框构建了一个临时解决方案。

我希望有人可以帮助我。我很感激!

2 个答案:

答案 0 :(得分:0)

您可以尝试在创建模态后创建的全局方法

dialogInitiator.dialog({
    modal: true,
    autoOpen: false,
    create: funtion(e,ui) {
        window.closeMyDialog = function() {
            $('#dialog-initiator').dialog('close');    
        };
    }
})...

然后通过执行window.parent.closeMyDialog();来调用它。

答案 1 :(得分:0)

为什么不使用JQuery UI?它比制作自己的更容易。

http://jqueryui.com/dialog/#default