2016-06-10 128 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在本頁的另一個答案中指出。