Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQueryUI对话框IE8问题_Javascript_Jquery_Internet Explorer_Jquery Ui - Fatal编程技术网

Javascript jQueryUI对话框IE8问题

Javascript jQueryUI对话框IE8问题,javascript,jquery,internet-explorer,jquery-ui,Javascript,Jquery,Internet Explorer,Jquery Ui,我有一个jQueryUI对话框,其中包含一个表单,允许用户发布广告。由于表单包含一个文件上传,表单的目标是一个iFrame 从这个iFrame中,我销毁父窗口中的对话框并创建一个新的(或者我更改原始对话框的选项,这没有任何区别)。要点是,从iFrame中,我为新对话框定义了新按钮,这些按钮本身附加到在主窗口元素上工作的事件 在Firefox、Safari和Chrome中,这项功能非常有效: var p = parent; p.$('#dialog_new_ad').html('<

我有一个jQueryUI对话框,其中包含一个表单,允许用户发布广告。由于表单包含一个文件上传,表单的目标是一个iFrame

从这个iFrame中,我销毁父窗口中的对话框并创建一个新的(或者我更改原始对话框的选项,这没有任何区别)。要点是,从iFrame中,我为新对话框定义了新按钮,这些按钮本身附加到在主窗口元素上工作的事件

在Firefox、Safari和Chrome中,这项功能非常有效:

var p = parent;    

p.$('#dialog_new_ad').html('<form id="post_ad_form" style="display: none" data-remote="true"></form><div class="header"><h1 class="header_title"></h1><div class="header_company"></div><div class="header_location"></div></div><div class="content"></div>');

p.$('#dialog_new_ad').dialog({
 minHeight: 600,
 width: 800,
 position: ['center',25],
 modal: true,
 autoOpen: false,
 title: '<%= 'Preview: ' if params[:action] == 'preview' %><%= @ad.title %>',
 buttons: {
  "« Back": function() {
   p.$('#post_ad_form').attr('method','get');
   p.$('#post_ad_form').attr('action','/ads/<%= @ad.id %>/revise');
   p.$('#post_ad_form').submit();
  },
  "Submit »": function() {
   p.$('#post_ad_form').attr('method','post');
   p.$('#post_ad_form').html('<input type="hidden" name="_method" value="put">');
   p.$('#post_ad_form').attr('action',"/ads/<%= @ad.id %>/confirm");
   p.$('#post_ad_form').submit();
  }
 }
});
var p=parent;
p、 $('#dialog_new_ad').html('');
p、 $('#dialog_new_ad')。dialog({
身高:600,
宽度:800,
位置:[‘中间’,25],
莫代尔:是的,
自动打开:错误,
标题:“”,
按钮:{
“«返回”:函数(){
p、 $('post#u ad_form').attr('method','get');
p、 $('post#u ad_form').attr('action','/ads//revision');
p、 $('post#u ad_form')。提交();
},
“提交”»:函数(){
p、 $('post'u ad_form').attr('method','post');
p、 $('post#u ad_form').html('';
p、 $('post#u ad_form').attr('action',“/ads//confirm”);
p、 $('post#u ad_form')。提交();
}
}
});
此代码位于表单发布到的iFrame中

如果您查看按钮函数,您将看到它们所做的工作也在子窗口(iFrame)的上下文中定义,即使按钮位于父窗口中。这是因为函数是在iFrame中创建的,因此必须从该上下文引用对象

现在的问题是,在InternetExplorer中,它有时可以工作,但其他的则不行。如果没有,我得到的错误是“无法在释放的脚本中执行代码”,它指向jquery-ui.js中定义按钮函数的部分。错误是否发生完全是随机的。好像这取决于在调用代码之前是否完成了某个操作。如前所述,在任何其他浏览器中,它都能正常工作

整个内容(在iFrame中)都包含在
$(function(){[…]}
中,因此加载DOM不是问题所在。这可能与.html调用创建的表单未“完成放入DOM”有关当按钮功能被定义时,但这对我来说似乎很奇怪。有什么想法吗

注意:jQuery.html函数使用innerHTML创建新元素。如果元素在其后直接引用,这是否可能导致IE中出现任何问题

更新:我放弃了,只是简单地将虚拟表单放在父元素中,因此它总是可以被不同类型的子iFrame使用,无论它们是否实际加载。当表单是父HTML的静态部分,而不是动态插入时,一切都正常。我仍然不明白为什么动态插入但在IE中,ertion不起作用