Reputation: 460
Cannot set property 'innerHTML' of null"
Please help, I'm new to JS so if it is a newbie error don't kill me lol. It works perfectly on console, returns what I'm searching but it's not showing at DOM
HTML:
<div id="clock">
<script src="../JS/countdown.js"></script>
</div>
JS
const getRemainingTime = deadline => {
let now = new Date (),
remainTime = (new Date (deadline) - now + 1000) / 1000,
remainSeconds = ('0' + Math.floor(remainTime % 60)).slice(-2),
remainMinutes = ('0' + Math.floor(remainTime / 60 % 60)).slice(-2),
remainHour = ('0' + Math.floor(remainTime / 3600 % 24)).slice(-2),
remainDays = Math.floor(remainTime / (3600 * 24));
return {
remainTime,
remainSeconds,
remainMinutes,
remainHour,
remainDays
}
}
const countdown = (deadline, elem, finalMessage) => {
const el = document.getElementById(elem);
const timerUpdate = setInterval( () => {
let t = getRemainingTime(deadline);
el.innerHTML = "${t.remainDays}d:${t.remainHour}h:${t.remainMinutes}m:${t.remainSeconds}s";
if (t.remainTime <= 1) {
clearInterval(timerUpdate)
el.innerHTML = finalMessage;
}
}, 1000)
}
countdown('Mon June 17 2021 00:00:00 GMT-0600', 'clock', 'Discount')
Upvotes: 0
Views: 887
Reputation: 2800
You're using double quotes on template literals. And you might not have a div with that ID. try this:
const getRemainingTime = deadline => {
let now = new Date(),
remainTime = (new Date(deadline) - now + 1000) / 1000,
remainSeconds = ('0' + Math.floor(remainTime % 60)).slice(-2),
remainMinutes = ('0' + Math.floor(remainTime / 60 % 60)).slice(-2),
remainHour = ('0' + Math.floor(remainTime / 3600 % 24)).slice(-2),
remainDays = Math.floor(remainTime / (3600 * 24));
return {
remainTime,
remainSeconds,
remainMinutes,
remainHour,
remainDays
}
}
const countdown = (deadline, elem, finalMessage) => {
const el = document.getElementById(elem);
const timerUpdate = setInterval(() => {
let t = getRemainingTime(deadline);
el.innerHTML = `${t.remainDays}d:${t.remainHour}h:${t.remainMinutes}m:${t.remainSeconds}s`;
if (t.remainTime <= 1) {
clearInterval(timerUpdate)
el.innerHTML = finalMessage;
}
}, 1000)
}
countdown('Mon June 17 2021 00:00:00 GMT-0600', 'clock', 'Discount')
<div id="clock"></div>
Upvotes: 4