我在网络应用程序中遇到以下情况。
单击链接时,会立即构建并打开一个对话框:
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对话框构建了一个临时解决方案。
我希望有人可以帮助我。我很感激!
答案 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?它比制作自己的更容易。