2016-06-10 142 views
-1

解释我为什么这个工程,当我点击按钮。javascript:getElementById没有找到元素

<script type="text/javascript"> 
    function myFunction() { 
    if (screen.width <= 800) { 
     document.getElementById('cover-img').style.display = 'none'; 
    } 
    } 
</script> 
<input type="submit" onclick="myFunction()"> 

虽然这并不:

<script type="text/javascript"> 
    if (screen.width <= 800) { 
    document.getElementById('cover-img').style.display = 'none'; 
    } 
</script> 

它会返回错误:

Uncaught TypeError: Cannot read property 'style' of null

+2

第二个在页面加载时正在运行,因此您可能在该元素存在之前的''中有脚本。将脚本移到“”之前,它应该可以工作。 – 2016-06-10 14:09:25

+0

可能是因为在执行脚本时不存在cover-img – Li357

+1

[为什么jQuery或诸如getElementById的DOM方法未找到该元素?](http://stackoverflow.com/questions/ 14028959/why-does-jquery-or-a-dom-method-such-getelementbyid-not-the-element) – Xufox

回答

3

你可以做纯CSS

@media(max-width:75em){ 
    #mydiv{ 
     display:none; 
    } 
} 
+1

不回答问题,只是一种解决方法。与JavaScript没有任何关系 – Li357

+0

@AndrewL:在这种情况下,解决方案的CSS比JavaScript更有趣。 – Mimouni

+0

这是主观的@IlyasMimouni无论如何,好的答案。 – Li357

0

这里有两个例子更好地解释它:

在这个例子中,JS位于顶端,所以在我使用ID cover-img制作div之前运行。当它跑的getElementById含义返回0的结果,让误差Cannot read property 'style' of null"

<script type="text/javascript"> 
 
    document.getElementById('cover-img').style.display = 'none'; 
 
</script> 
 
<div id="cover-img">I'm still alive!</div> 
 
<div>I'll be here not matter what...</div>

在这个例子中,但是我已经搬到脚本创建覆盖-IMG的div后意的getElementById有可以传递给样式的结果。

而你会看到div被隐藏。

<div id="cover-img">I'm still alive!</div> 
 
<div>I'll be here not matter what...</div> 
 
<script type="text/javascript"> 
 
    document.getElementById('cover-img').style.display = 'none'; 
 
</script>

我希望是有道理的,我把大小有点不只是为了使其更清晰,但也同样适用与在地方正确的。

这就是说,使用CSS来实现这一点是一个更好的解决方案,因为@Foker在本页的另一个答案中指出。