2017-12-22 10 views
0

のプロパティ 'のTextContent' を設定することはできません、私はエラーを取得する:この行にnullのプロパティ 'のTextContent' を設定することはできません:はこれに何らかの理由でヌル

document.getElementById("days").textContent = d; 

function countdown() { 
 
    var now = new Date(); 
 
    var eventDate = new Date(2018, 1, 19); 
 
    var currentTime = now.getTime(); 
 
    var eventTime = eventDate.getTime(); 
 
    var remTime = eventTime - currentTime; 
 
    var s = Math.floor(remTime/1000); 
 
    var m = Math.floor(s/60); 
 
    var h = Math.floor(m/60); 
 
    var d = Math.floor(h/24); 
 
    h %= 24; 
 
    m %= 60; 
 
    s %= 60; 
 
    h = (h < 10) ? "0" + h : h; 
 
    m = (m < 10) ? "0" + m : m; 
 
    s = (s < 10) ? "0" + s : s; 
 

 
    document.getElementById("days").textContent = d; 
 
    document.getElementById("days").innerText = d; 
 

 
    document.getElementById("hours").textContent = h; 
 

 
    document.getElementbyId("minutes").textContent = m; 
 

 
    document.getElementById("seconds").textContent = s; 
 
} 
 
countdown();
<li> 
 
    <span class="value">Ends in: 
 
    </span> 
 
    <p id="days">30</p> 
 
    <p id="hours">10</p> 
 
    <p id="minutes">5</p> 
 
    <p id="seconds">1</p> 
 
</li>

+3

ていますか? 'document.getElementbyId(" minutes ")' b'が大文字でなければならないエラーがあります。 –

+0

投稿したhtmlスニペットが実際に読み込まれる前にcountdown()関数が実行されているように見えます。その結果、id "days"の要素が見つからず、getElementByIdがnullを返します。明らかに、指定されたプロパティは含まれていませんエラーメッセージに表示されます。 – fatherOfWine

答えて

0

問題は、あなたの "カウントダウン"が実行されているときに要素が存在しない可能性があります...あなたが照会している要素のセットを含むbody/divのcountdown onloadを呼び出すことができますか?

<body onload="countdown()"> 
+1

そのようなhtmlの中でJavaScriptを使用することは貧しい実践になっています。 –

0

私が見る唯一の問題は、あなたのbニーズは、この行に大文字にするということです。

document.getElementbyId("minutes").textContent = m; 

期待通りのコードが動作することを固定する場合:

function countdown() { 
 
    var now = new Date(); 
 
    var eventDate = new Date(2018, 1, 19); 
 
    var currentTime = now.getTime(); 
 
    var eventTime = eventDate.getTime(); 
 
    var remTime = eventTime - currentTime; 
 
    var s = Math.floor(remTime/1000); 
 
    var m = Math.floor(s/60); 
 
    var h = Math.floor(m/60); 
 
    var d = Math.floor(h/24); 
 
    h %= 24; 
 
    m %= 60; 
 
    s %= 60; 
 
    h = (h < 10) ? "0" + h : h; 
 
    m = (m < 10) ? "0" + m : m; 
 
    s = (s < 10) ? "0" + s : s; 
 

 
    document.getElementById("days").textContent = d; 
 
    document.getElementById("days").innerText = d; 
 

 
    document.getElementById("hours").textContent = h; 
 

 
    document.getElementById("minutes").textContent = m; 
 

 
    document.getElementById("seconds").textContent = s; 
 
} 
 
countdown();
<li> 
 
    <span class="value">Ends in: 
 
    </span> 
 
    <p id="days">30</p> 
 
    <p id="hours">10</p> 
 
    <p id="minutes">5</p> 
 
    <p id="seconds">1</p> 
 
</li>

あなたのc DOMはロードが完了した後に実行されます。

あなたはこのようにそれを行うことができます:getElementById代わりのgetElementbyId

document.addEventListener('DOMContentLoaded',() => countdown()); 
+0

このタイプミスが原因でこのエラーは発生しないため、別のエラーが発生します。 – Barmar

+0

私の答えは、誤植以外のコードにエラーはないと言います。私はまた、コードはDOMの後に実行する必要があると言います。 –

0

あなたがエラーを持っています。

新しいコードは次のようになります。あなたはそれがその行であることを確認

function countdown() { 
 
    var now = new Date(); 
 
    var eventDate = new Date(2018, 1, 19); 
 
    var currentTime = now.getTime(); 
 
    var eventTime = eventDate.getTime(); 
 
    var remTime = eventTime - currentTime; 
 
    var s = Math.floor(remTime/1000); 
 
    var m = Math.floor(s/60); 
 
    var h = Math.floor(m/60); 
 
    var d = Math.floor(h/24); 
 
    h %= 24; 
 
    m %= 60; 
 
    s %= 60; 
 
    h = (h < 10) ? "0" + h : h; 
 
    m = (m < 10) ? "0" + m : m; 
 
    s = (s < 10) ? "0" + s : s; 
 

 
    document.getElementById("days").textContent = d; 
 
    document.getElementById("days").innerText = d; 
 

 
    document.getElementById("hours").textContent = h; 
 

 
    document.getElementById("minutes").textContent = m; 
 

 
    document.getElementById("seconds").textContent = s; 
 
} 
 
countdown();
<li> 
 
    <span class="value">Ends in: 
 
    </span> 
 
    <p id="days">30</p> 
 
    <p id="hours">10</p> 
 
    <p id="minutes">5</p> 
 
    <p id="seconds">1</p> 
 
</li>

+0

そのタイプミスはこのエラーの原因にはなりません。 – Barmar

関連する問題