繁体   English   中英

样式显示在 Firefox、Opera、Safari 中不起作用 -(IE7 正常)

[英]Style display not working in Firefox, Opera, Safari - (IE7 is OK)

我有一个绝对定位的div ,我想在用户单击链接时显示它。 链接的onclick调用了一个 js 函数,该函数将 div 的显示设置为阻止(也尝试过:""、 inlinetable-cellinline-table等)。 这在 IE7 中非常有效,但在我尝试过的所有其他浏览器(FF2、FF3、Opera 9.5、Safari)中都没有。

我尝试在通话前后添加警报,它们显示显示已从none更改为blockdiv未显示。

如果我使用 Firebug 的 HTML 检查器更改显示值(但不是通过 Firebug 的控制台运行 javascript),我可以让div在 FF3 中显示 - 所以我知道它不只是显示在屏幕外等。

我已经尝试了所有我能想到的方法,包括:

  • 使用不同的文档类型(XHTML 1、HTML 4 等)
  • 使用可见性可见/隐藏而不是显示块/无
  • 使用内联 javascript 而不是函数调用
  • 来自不同机器的测试

关于什么可能导致这种情况的任何想法?

你能提供一些重现错误的标记吗?

你的情况一定与你的代码有关,因为我可以让它在 IE、FF3 和 Opera 9.5 上工作:

 function show() { var d = document.getElementById('testdiv'); d.style.display = 'block'; }
 #testdiv { position: absolute; height: 20px; width: 20px; display: none; background-color: red; }
 <div id="testdiv"></div> <a href="javascript:show();">Click me</a>

由于使用 javascript 设置属性似乎从未奏效,但使用 Firebug 的检查进行设置,我开始怀疑 javascript ID 选择器坏了 - 也许 DOM 中有多个项目具有相同的 ID? 源代码没有显示有,但我发现使用 javascript 遍历所有 div 时确实如此。 这是我最终用来显示弹出窗口的函数:

function openPopup(popupID)
{
  var divs = getObjectsByTagAndClass('div','popupDiv');
  if (divs != undefined && divs != null)
  {
    for (var i = 0; i < divs.length; i++)
    {
      if (divs[i].id == popupID)
        divs[i].style.display = 'block';        
    }
  }
}

(未列出实用函数 getObjectsByTagAndClass)

理想情况下,我会找出为什么多次插入同一个项目,但我无法控制渲染平台,只能控制它的输入。

因此,在调试此类问题时,请记住检查 DOM 中的重复 ID,这可能会破坏 getElementById

感谢所有回答的人,感谢您的帮助!

找到答案:我需要使用以下内容才能使其在两个浏览器上都能正常工作:

document.getElementById('editRow').style.display = '';

实际上,我遇到了您在此处描述的相同问题。 真正解决我的问题的是更改文档属性。

旧的 DOCTYPE/html 规范

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

替换为

<html>

检查错误控制台(Firefox 3 中的“工具菜单”>“错误控制台”)以确保没有发生其他您没有看到的错误,这会阻止您的脚本工作。

尝试设置 div 的高度和宽度,并通过将其 z-index 设置为高于其他所有内容来确保它位于顶部。 如果绝对定位的 div 位于相对定位的元素内,则它的顶部和左侧位置基于相对定位元素的顶部和左侧。 尝试将您的 div 放在 body 元素下方。

你必须写一个window.onload方法:

window.onload = document.getElementById('testdiv').style.display='inline';

或者你也可以创建一个变量:

var d = document.getElementById('testdiv');
window.onload = d.style.display = 'inline';

我会给你一个大提示:

<div style="..." class="..."> ... </div>

如果您有某种风格,那么 document.style 将起作用! 如果你在课堂上有东西,它不会出现在 document.style 和 class="..." 将覆盖它!

考虑一下,这将解决很多问题。 仅此一点点的了解就可以让您摆脱这种精神病毒。 祝你有美好的一天。 干杯,Ron Lentjes,LC CLS。

在 Firefox 3.5 上有一个恼人的显示错误,但在 IE7 或 Firefox 2.0.9 上没有

我有 3 个 DIV 的绝对位置 - 第一个是纯文本; 第二个带有 CSS 菜单(带有 UL 和 LI 的 Sucklefish 类型)和第三个同上。 即使已经检查了编码并发现 W3C 的 HTML 验证器是完美的,第三个也根本不会显示。

作为临时措施,我合并了第二个和第三个 DIV 的内容。

当 IE7 和 FF2 显示正常但不是 FF 3.5 时,Mozilla 的情况一定很糟糕

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM