2010-12-11 77 views
0

我创建了一个页面,默认情况下为element1.style.display='none'。现在我有另一个元素element2,点击时显示element1。但是,当试图将element1设置为设置element1.style.display="block"的函数时,它给我一个错误,说element1为空。我明白这是因为默认display=none空元素javascript显示:无

我该如何解决这个问题?这是使用JavaScript,而不是jQuery。

var hash = location.hash; 
alert(hash); 

function init() { 
    if(hash == '#menu-a' || hash == '') { 
     document.getElementById('menu-a').style.display = 'block'; 
    } 
    else if(hash == '#menu-b') { 
     document.getElementById('menu-b').style.display = 'block'; 
    } 
    else { 
     document.getElementById('menu-c').style.display = 'block'; 
    } 
} 

window.onload=init; 
+1

您的问题与'style.display'无关,但为了帮助您,您必须发布代码的相关部分。 – 2010-12-11 16:54:54

+0

我爱人类的语音代码。我更喜欢真正的代码。你能否提供一个代码示例? – 2010-12-11 16:55:51

+0

你可以发布你的代码吗?该错误不是因为显示样式设置为无。由于style属性,元素不会被视为null。还有其他事情正在发生。 – charliegriefer 2010-12-11 16:56:01

回答

0

如果隐藏的元素总是以相同的顺序,你可以尝试使用的getElementsByTagName(“”)[arrayindex]访问它。

+0

对元素的引用应该很好,并且足够了。这很可能是范围问题,'element1'从他想访问的地方看不到。但是,如果没有代码,那么对此没有人可以说(更好的解决方案是给元素一个ID并使用'getElementById')。 – 2010-12-11 17:07:24

+0

tl; dr版本:getElementById在正确的环境中是最好的解决方案。你是对的。 完整评论:我假设 - 因为没有提供任何代码 - 所有元素都被正确识别并且getElementById仍然不起作用。虽然getElementById当然是最好的解决方案,但我只是想提供一些快速解决方案,试图以美观的方式解决这个问题,所以它可以在较小的压力下工作。 – Cadoc 2010-12-11 17:25:55

+0

下面是代码var hash = location.hash; alert(hash); 函数init() { 如果(hash =='#menu-a'|| hash =='')document.getElementById (hash =='#menu-b'){document.getElementById('menu-b')。style.display ='block'; } else { document.getElementById('menu-c')。style.display ='block'; } } window.onload = init; – 2010-12-11 17:29:47

0

有没有机会在dom准备好之前触发javascript? element1存在于你想要访问它的那一刻的dom树中?

+0

应该是评论imo。 – 2010-12-11 17:08:18

1

我明白这是因为显示器=无默认

号,是因为没有被赋值给变量。

我猜你在期待一个id="element1"的元素自动创建一个名为element1的JavaScript变量 - 它不应该这样做。

document.getElementById('element1').style.display = 'block'; 
0

你应该做display:block不久时element被初始化,然后初始化后马上恢复到display:none

0

我当时有一个类似的问题:并非所有的浏览器都以同样的方式对待display:none(或至少他们的孩子)的元素。我有一些SVG对象放置在两个DIV中,我想显示其中一个或另一个。在初始化过程中,我会对SVG元素进行一些操作(更改SVG中的一些文本元素)。这与Firefox完美结合,但Opera,Chrome和IE都失败了。 在这些浏览器中使用display:none与div对齐的元素在尝试使用document.getElementById(myID)获取它们时发出空结果。第一个解决方法是仅在初始化(此工作)后设置display:none属性,但是当我想再次显示它们时,所有初始化都已丢失(文本标签全部处于默认状态)。 我认为这证明DIV的内容与display:none不知何故从DOM清除,而不是简单的隐藏。 我也尝试使用visibility:hidden而不是display:none,但这使页面布局变得非常混乱。这似乎在所有浏览器的唯一解决办法是(迄今为止)的地方我想在“外空”隐藏像it is suggested here...

position: absolute; 
top: -9999px; 
left: -9999px; 
0

的DIV我想你改变了这一切元素的样式之前即使这个元素是在你的html页面中生成的。当您尝试访问某个网页中的某个元素时,如果该元素在该时间点的页面中不可用,则返回Null 我的建议是在完全加载这些元素之后运行该javascript部分,方法是使用如下属性, onclickonload等...