重新加载后,javascript无法找到iframe

时间:2013-03-20 07:51:51

标签: php javascript ajax iframe

我不是要求解决方案,因为我解决了这个问题。这更像是“为什么会发生”?理解是一切的根源,我无法弄清楚它为什么会发生。

我有一个带有两个分层div(Div 1和Div 2)的网页。 当点击Div 2时,Div1会显示一个按钮,其中包含一个表单和一个iframe(名为“myframe”)。 当用户点击Div 2中的“取消”时,Div 2被清空并消失,再次显示Div 1。 使用Ajax和PHP加载所有内容。

我的问题: 我第一次点击Div 1中的按钮时,一切都显示正常 - 最重要的是 - 我可以使用javascript访问iframe。

两个

var b=window.frames['myframe']
and 
var b=window.frames[0]

导致显示'myframe'的警报(b.name)。

然而奇怪的是,当我取消Div 2(清空并隐藏它)然后再次按下Div 1中的按钮时,使用完全相同的代码,在引用iframe时在javascript中给我'NULL'。 我已经检查了DOM,取消后Div 2真的是空的,第二次iframe就在那里,正确显示它的内容,那么为什么javascript没有把它拿起来?我已经尝试等待几分钟再次按下按钮,先在Div 2中加载另一页,但它没有用。

我的解决方案是将时间添加到iframe名称,从而在每次加载时为其指定唯一名称。这很好用,现在即使在'取消'之后,javascript也可以访问iframe。

我的问题是:为什么在使用静态名称时,js第二次找不到iframe?

div 2的内容是:

//THE FORM
<form id="myform" name="myform" class="myform" action="" method="post" enctype="multipart/form-data" target="upload_target" onsubmit="" onkeypress="return keyCheck(event)">
// some form stuff
</form>
<iframe src='imbo/php/system_fotohidden.php' id='myframe' name='myframe'></iframe>

和javascript:

function click(){
    var b=window.frames['myframe'];
    alert(b.name);
    }

[编辑] 也许是为了澄清我在做div的事情:

  1. 点击Div 1
  2. 中的'loadform'按钮
  3. Ajax在Div 2中加载一个带有Form和Iframe的页面(它显示的很好)
  4. 使用JS =&gt;访问div 2中的iframe JS找到Iframe并弹出它的名字
  5. 取消表格:JS =&gt; div2.innerHTML =''和div2.style.display ='none'
  6. 点击Div 1
  7. 中的'loadform'按钮
  8. Ajax使用Div 2中的Form和Iframe加载完全相同的页面(它仍然显示很好)
  9. 使用JS =&gt;访问div 2中的iframe JS给出NULL而不是Iframe-name

1 个答案:

答案 0 :(得分:0)

通过将元素innerHTML属性设置为“”,可以删除其所有子元素,因此它们不再存在。你不能通过名字,document.frames或其他任何内容来引用它们。

要隐藏DIV元素,您可以使用DIV.style.visibility='hidden';

这是一个示例小提琴http://jsfiddle.net/ptFwE/1/;您可以看到childNodes的{​​{1}}属性表示在将div设置为空字符串后,DIV中没有子项。

如果您出于其他目的需要此div,请考虑将IFRAME的innerHTML仅设置为visibility或使用其他DIV。