javascript - 更改可见性不会立即隐藏 iFrame

标签 javascript iframe visibility

我有一个页面,在某个操作上使 iframe 可见,并用一些 HTML 填充 iframe(例如,多选框和确定按钮)。

iframe 上的 OK 按钮具有如下定义的 onClick 方法:

onClick="parent.hideIFrame();parent.processMultiSelectBox();"

当用户在 iframe 上单击“确定”时(大概是在玩完多选框之后),我希望 iFrame 立即消失,然后可以处理多选框中的选定值。但这不是正在发生的事情。 iFrame 在另一个函数运行期间保持可见,仅在第二个函数完成后才消失。

hideIFrame 函数非常简单:

function hideIFrame() {
  frmObj = document.all.iFrameID;
  if(frmObj) {
    frmObj.style.visibility = "hidden";
  }
}

为了清楚起见,我对上述函数进行了解释(删除了一些指示变量赋值等)

第二个函数实际上循环了多选对象中的所有选项并对其进行处理。这大约需要半秒钟,只有在完成之后,我的 iFrame 才会消失。当我点击确定时看到它徘徊半秒有点麻烦。

我的问题是是否有什么方法可以让这该死的东西消失得更快。用“经典 C”行话来说,是否存在使可见性变化立即发生的“同花顺”?

我确实注意到,如果我在第二个函数中将“警报”作为第一行,则 iframe 会立即消失,但现在警报框上的 OK 会在第二个函数完成时持续存在。

谢谢。

编辑:根据 DDaviesBrackett 的回答,这就是我最终所做的:

iframe 中的 onclick 更改为:

onClick="parent.hideAndProcessMultiSelectBox(parm1, parm2);"

hideAndProcessMultiSelectBox 函数定义为:

function hideAndProcessMultiSelectBox( parm1, parm2 ) {
   hideIFrame();
   setTimeout( function() { processMultiSelectBox( parm1, parm2 ); }, 0 );
}

瞧..没有延迟..

最佳答案

您已经找到了问题的根源;在当前 JS 线程完成之前不会发生文档重排(以免在 JS 执行期间重绘很多次)。在进行昂贵的处理之前,您需要将控制权返回给浏览器。

实现这一点的最简单方法是在延迟为 0 的 setTimeout 中调用 processMultiSelectBox:

onClick="parent.hideIFrame();parent.setTimeout(parent.processMultiSelectBox,0);"

如果您需要将参数传递给要设置超时的对象,您有两种选择:在评估为 Javascript(坏、坏、非常坏、可怕)的字符串上设置超时或定义匿名函数调用您感兴趣的那个:

onClick="parent.hideIFrame();parent.setTimeout(function(){parent.processMultiSelectBox(foo, bar, 'baz');},0);"

尽管 visibility:hiddendisplay:none 之间存在差异,但 RSolberg 的回应也可能有所帮助。

关于javascript - 更改可见性不会立即隐藏 iFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/989344/

相关文章:

javascript - 在客户端更改上传文件的名称

javascript - 延迟加载下一页 fullpage.js 不起作用

jquery - 将搜索查询 append 到 iframe src URL

Javascript使用iframe下载多个文件

android - imageView 的 setVisibility(View.VISIBLE) 不起作用

c - 使用 GCC 强制从链接的静态库中导出特定的可见符号(同时排除其他符号)

javascript - 如何导出 index.js 中的所有组件?

javascript - Spotify Apps 1.0 setItem 不工作

iframe - 如何让文本 float 到 iframe 旁边

c++ - 使用 g++ 与 ACE 库链接时遇到一些问题