bugl
bugl
HomeLearnPatternsPathsSearch
HomeLearnPatternsPathsSearch

Loading lesson path

Learn/JavaScript/Debugging, Projects, and Reference
JavaScript•Debugging, Projects, and Reference

Project - Event Listener

Flash cards

Review the key moves

1/4
Core idea

What is the main idea behind Project - Event Listener?

Lesson checks

Practice each idea before moving on

Short Mimo-style checks built from this lesson's code, terms, and sequence.

1Quick choice

Which statement best captures the main point of this lesson?

2Fill blank

Complete the missing token from the example code.

<h2>___</h2>
3Order

Put the learning moves in the order that makes the concept easiest to apply.

JavaScript in External File
Using Event Listeners
Using an Event Listener

Using an Event Listener

This is a copy of the previous project.

Now using Event Listeners instead of Onclick Attributes .

0

Using Event Listeners

Using addEventListener() makes it easier to

  • Keep HTML and JavaScript separated
  • Add multiple events to the same element
  • Write cleaner code in bigger projects

HTML Code

<h2>Counter</h2>
<p id="count" style="font-size:40px;">0</p>
<button id="btnPlus">+</button>
<button id="btnMinus">-</button>
<button id="btnReset">Reset</button>
<button id="btnSave">Save</button>
<button id="btnLoad">Load</button>
<script>
// JavaScript goes here
</script>

JavaScript Code

// Add event listeners document.getElementById("btnPlus").addEventListener("click", increaseCount); document.getElementById("btnMinus").addEventListener("click", decreaseCount); document.getElementById("btnReset").addEventListener("click", resetCount); document.getElementById("btnSave").addEventListener("click", saveCount); document.getElementById("btnLoad").addEventListener("click", loadCount); // Declare the counter
let count = 0;
// Load counter when the page opens loadCount(); // Function to display the counter function updateCount() { document.getElementById("count").innerHTML = count;
}
// Function to increase the counter function increaseCount() { count++; updateCount();
}
// Function to decrease the counter function decreaseCount() {
if (count > 0) {
  count--;
  updateCount();
}
}
// Function to reset the counter function resetCount() { count = 0; updateCount();
}
// Function to save the counter function saveCount() { localStorage.setItem("count", count);
}
// Function to load the counter function loadCount() {
let saved = localStorage.getItem("count");
if (saved !== null) {
  count = Number(saved);
}
updateCount();
}
  • JavaScript is moved to an external file ( counter.js )
  • Uses DOMContentLoaded so JavaScript runs only after HTML is ready
  • Cleaner structure using small functions + element variables
  • Shows a short Saved! message
  • Shows a short Loaded! message

HTML Code

<!DOCTYPE html>
<html>
<body>
<h2>Counter</h2>
<p id="count" style="font-size:40px;">0</p>
<button id="btnPlus">+</button>
<button id="btnMinus">-</button>
<button id="btnReset">Reset</button>
<button id="btnSave">Save</button>
<button id="btnLoad">Load</button>
<script src="counter.js"></script>
</body>
</html>

Notice that the <script> tag is placed at the bottom, before </body> .

counter.js

document.addEventListener("DOMContentLoaded", function () {
  // Declare the counter
  let count = 0;
  // Use element variables
  const countEl = document.getElementById("count");
  const msgEl = document.getElementById("message");
  const btnPlus = document.getElementById("btnPlus");
  const btnMinus = document.getElementById("btnMinus");
  const btnReset = document.getElementById("btnReset");
  const btnSave = document.getElementById("btnSave");
  const btnLoad = document.getElementById("btnLoad");
  // Add event listeners btnPlus.addEventListener("click", increaseCount); btnMinus.addEventListener("click", decreaseCount); btnReset.addEventListener("click", resetCount); btnSave.addEventListener("click", saveCount); btnLoad.addEventListener("click", loadCount); // Function to display the counter function updateCount() { document.getElementById("count").innerHTML = count;
}
// Function to diplay message function showMessage(text) { msgEl.innerHTML = text; setTimeout(function () { msgEl.innerHTML = "";
}, 3000);
}
// Function to increase the counter function increaseCount() { count++; updateCount();
}
// Function to decrease the counter function decreaseCount() { count--; updateCount();
}
// Function to reset the counter function resetCount() { count = 0; updateCount();
}
// Function to save the counter function saveCount() { localStorage.setItem("count", count); showMessage("Saved!");
}
// Function to load the counter function loadCount() {
let saved = localStorage.getItem("count");
if (saved !== null) {
  count = Number(saved);
  showMessage("Loaded!");
}
updateCount();
}
});

JavaScript in External File

Using counter.js makes your project:

  • More Organized
  • Keep HTML and JavaScript separated
  • Easier to read and to reuse
  • More like real-world projects

DOMContentLoaded

Why use DOMContentLoaded ?

When you use an external JavaScript file, the browser may load the script before the HTML is ready. So we use: document.addEventListener("DOMContentLoaded", function() { // JavaScript code }); This means: Run the JavaScript code after the page has finished loading the HTML. JavaScript Projects JavaScript Counter A counter project with restore and save in lovalStorage. JavaScript Event Listener The counter project using event listener instead of onclick. JavaScript Do-Do List A do-do list saved in an array in local storage. JavaScript Modal Popup A modal popup window that appears on top of the page.

document.addEventListener("DOMContentLoaded", function() {
 // JavaScript code
});

This means: Run the JavaScript code after the page has finished loading the HTML.

JavaScript Projects

  • JavaScript Counter A counter project with restore and save in lovalStorage.
  • JavaScript Event Listener The counter project using event listener instead of onclick.
  • JavaScript Do-Do List A do-do list saved in an array in local storage.
  • JavaScript Modal Popup A modal popup window that appears on top of the page.

Previous

JavaScript Reserved Words

Next

ECMAScript 2025