我不是要求解决方案,因为我解决了这个问题。这更像是“为什么会发生”?理解是一切的根源,我无法弄清楚它为什么会发生。
我有一个带有两个分层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的事情:
答案 0 :(得分:0)
通过将元素innerHTML
属性设置为“”,可以删除其所有子元素,因此它们不再存在。你不能通过名字,document.frames
或其他任何内容来引用它们。
要隐藏DIV
元素,您可以使用DIV.style.visibility='hidden';
。
这是一个示例小提琴http://jsfiddle.net/ptFwE/1/;您可以看到childNodes
的{{1}}属性表示在将div
设置为空字符串后,DIV
中没有子项。
如果您出于其他目的需要此div,请考虑将IFRAME的innerHTML
仅设置为visibility
或使用其他DIV。