IE 7上iframe中的日历小部件位置

IE 7上iframe中的日历小部件位置,iframe,dhtml,Iframe,Dhtml,我有一个包含iframe和DHTML日历小部件的网页。页面以及iframe内的内容都能正确显示。问题是,当我激活日历时,它的位置离iframe足够近,以至于iframe隐藏了一些日历 我试图通过使用javascript和CSS(Zindex,z-index)来操纵iframe的定位,但iframe始终显示为页面上的最顶层,掩盖了在与iframe相同的区域中呈现的任何父DHTML内容。我还将DHTML日历的css更改为values>0,并将小部件scriplet包装在一个div/span中,该di

我有一个包含iframe和DHTML日历小部件的网页。页面以及iframe内的内容都能正确显示。问题是,当我激活日历时,它的位置离iframe足够近,以至于iframe隐藏了一些日历


我试图通过使用javascript和CSS(Zindex,z-index)来操纵iframe的定位,但iframe始终显示为页面上的最顶层,掩盖了在与iframe相同的区域中呈现的任何父DHTML内容。我还将DHTML日历的css更改为values>0,并将小部件scriplet包装在一个div/span中,该div/span具有高z-index值,但没有运气。

iframe的z-index由IE处理。如果您可以摆脱它,我建议您这样做,并将内容嵌入到一个常规div中

如果你除了这样做没有其他选择,请记住,在IE6中,像和这样的元素的z索引是无限的。所以堆叠的方法是使用具有更高zindex的iframe,这样它将是无穷大vs无穷大+1

这方面的一个例子是vs堆叠。两者都有无限的z索引,但您可以将它们堆叠起来,这可能会有帮助


这是一个非常糟糕的想法,我的解决办法是避免在这个区域中使用其他字段。

您可以用div覆盖iFrame

问题是,除非在calandar div上使用position:relative、position:absolute或position:fixed,否则不能使用z-index

您要做的是将calandar的“position”CSS属性更改为“relative”。如果您的iFrame具有正常的静态定位(意味着您没有向其添加任何特殊定位,这将起作用)

如果iFrame具有“绝对”定位,则可能需要在calandar上执行“位置:绝对”

见链接:


(适用于包括IE6在内的所有现代浏览器)

谷歌搜索“IE z-index bug”,获取各种类似问题的示例和解决方案。html规范规定z-index应该是绝对的,但在IE中,如果父元素被定位,则可以为元素确定z-index。在极端情况下,我必须从导致问题的元素追溯DOM树,并在任何父元素的位置上设置z-index属性,而不是在被遮挡的元素上(并且应该正确地设置其z-index集)。IE开发者工具栏有助于动态调试如果真的很混乱,只需开始在树上设置z-index属性,直到找到使其看起来正确的属性。

我刚刚意识到问题似乎与MSXML以及IE如何转换XML文档有关。XML具有XSLT样式表关联,浏览器使用该关联转换XML文档。转换的输出是一个HTML文档。我认为披露我的HTTP响应是XML并不重要,因为最终呈现的是HTML,但这确实很重要。 当IFRAME的源是一个HTML文档时,一切正常。DHTML不在IFRAME范围内。但当使用MSXML转换IFRAME内容时,问题就出现了。下面是一些说明问题的示例文件。 对于DHTML组件,我使用的是spiffycalendar小部件,但我认为任何DHTML元素都会产生相同的结果

PARENT.HTML

IFRAME DHTML冲突示例

var pickupdate=new ctlSpiffyCalendarBox(“pickupdate”、“main”、“picku\u日期”、“btndae1”、“1”);

父窗口 领域 领域 FIELDpickupdate.writeControl(); 领域 领域 领域 保存更改

IFRAME.HTML

IFRAME.XSL ]> 测试XML文档 IFRAME内容

“你肯定可以用div来覆盖iFrame。”我怀疑这在IE6中会起作用。我用示例链接编辑了上面的文章。这在IE6和IE7中都是有效的;我看不到关于绝对定位的部分。我怀疑把一切都放在绝对的位置是件好事,尽管可能不是。理想情况下,iFrame将具有默认位置:static,而calandar将具有位置:relative或absolute。如果它不起作用,那么您可能需要给出位置:相对于日历的顶级父级。
                var pickupdate=new ctlSpiffyCalendarBox("pickupdate", "mainF", "PICKUP_DATE","btnDate1","",1);
            </script>