I'm trying to get a HTML element, a button, to my javascript file. I've tried .querySelector and .getElementById and my script file is attached at the bottom of my file just before the closing tag of my body element. but for each of variable I've tried the .addListener function on them but receive the error ' Cannot read properties of null (reading 'addEventListener')'
Here is my HTML Code:
<body>
<div class="whole">
<!-- Navbar -->
<div class="logo">
<a href="index.html"> <img src="/focus-logo.png" alt="logo" width="100" height="100"></a>
</div>
<!-- timer -->
<figure class="timer">
<div class="minsSec">
<span class="mins">0</span>
<span>:</span>
<span class="secs">00</span>
</div>
<svg class="progress-ring" height="240" width="240">
<circle
class="progress-ring__circle"
stroke-width="10"
fill="transparent"
r="110"
cx="120"
cy="120"
/>
</svg>
</figure>
<div class="timer__btn">
<a href="setTime.html"><button class="set">Set</button></a>
<button id="start">start focus</button>
<button id="reset">reset</button>
<button class="pause">pause</button>
</div>
<script src="setTime.js"></script>
<script src="newTimer.js"></script>
<script src="progressBar.js"></script>
</div>
</body>
and
<body>
<form action=".">
<label for="focusTime">Focus Time</label>
<input type="number" id="focusTimeNum" />
<label for="breakTime">Break Time</label>
<input type="number" id="breakTime" />
<a href="index.html"><button type="submit">Save settings</button></a>
</form>
<script src="setTime.js"></script>
<script src="newTimer.js"></script>
</body>
Newtimer.js
const el = document.querySelector(".timer");
const mindiv = document.querySelector(".mins");
const secdiv = document.querySelector(".secs");
const startBtn = document.querySelector("#start");
localStorage.setItem("btn", "focus");
let initial, totalsecs, perc, paused, mins, seconds;
** startBtn.addEventListener("click", () => { **
let btn = localStorage.getItem("btn");
if (btn === "focus") {
mins = +localStorage.getItem("focusTime") || 1;
} else {
mins = +localStorage.getItem("breakTime") || 1;
}
seconds = mins * 60;
totalsecs = mins * 60;
setTimeout(decremenT(), 60);
startBtn.style.transform = "scale(0)";
paused = false;
});
function decremenT() {
mindiv.textContent = Math.floor(seconds / 60);
secdiv.textConten
t = seconds % 60 > 9 ? seconds % 60 : `0${seconds % 60}`;
if (circle.classList.contains("danger")) {
circle.classList.remove("danger");
}
if (seconds > 0) {
perc = Math.ceil(((totalsecs - seconds) / totalsecs) * 100);
setProgress(perc);
seconds--;
initial = window.setTimeout("decremenT()", 1000);
if (seconds < 10) {
circle.classList.add("danger");
}
} else {
mins = 0;
seconds = 0;
let btn = localStorage.getItem("btn");
if (btn === "focus") {
startBtn.textContent = "start break";
startBtn.classList.add("break");
localStorage.setItem("btn", "break");
} else {
startBtn.classList.remove("break");
startBtn.textContent = "start focus";
localStorage.setItem("btn", "focus");
}
startBtn.style.transform = "scale(1)";
}
}
and setTimer.js
const focusTimeInput = document.getElementById("focusTimeNum").value;
const breakTimeInput = document.querySelector("#breakTime");
const pauseBtn = document.querySelector(".pause");
focusTimeInput.value = localStorage.getItem("focusTime");
breakTimeInput.value = localStorage.getItem("breakTime");
document.querySelector("form").addEventListener("submit", (e) => {
e.preventDefault();
localStorage.setItem("focusTime", focusTimeInput.value);
localStorage.setItem("breakTime", breakTimeInput.value);
});
document.getElementById("reset").addEventListener("click", () => {
startBtn.style.transform = "scale(1)";
clearTimeout(initial);
setProgress(0);
mindiv.textContent = 0;
secdiv.textContent = 0;
});
pauseBtn.addEventListener("click", () => {
if (paused === undefined) {
return;
}
if (paused) {
paused = false;
initial = setTimeout("decremenT()", 60);
pauseBtn.textContent = "pause";
pauseBtn.classList.remove("resume");
} else {
clearTimeout(initial);
pauseBtn.textContent = "resume";
pauseBtn.classList.add("resume");
paused = true;
}
});
The line from newTimer.js
startBtn.addEventListener("click", () => {
and the line from setTimer.js
document.getElementById("reset").addEventListener("click", () => {
I'm using node and express for the backend side