DEV Community

Cover image for Part 11: All You Need to Know to Master Web Development With HTML CSS and JavaScript
Blackie
Blackie

Posted on

Part 11: All You Need to Know to Master Web Development With HTML CSS and JavaScript

Understanding Events

Contents

Introduction
Attaching Event Listeners
Common Event Types
Code Examples
Projects
Bonus Tip

  • User interactions: Events represent actions like clicking, scrolling, typing, hovering, etc.
  • Triggering actions: Event handlers respond to these events, executing JavaScript code.

Attaching Event Listeners:

  • element.addEventListener(event, function): Binds an event listener to an element.
  • Arguments:
    • event (string): The type of event to listen for (e.g., "click", "mouseover", "keydown").
    • function (callback function): The code to execute when the event occurs.

Common Event Types:

  • Click events: "click", "dblclick"
  • Mouse events: "mouseover", "mouseout", "mousemove"
  • Keyboard events: "keydown", "keyup", "keypress"
  • Form events: "submit", "change", "input"
  • Other events: "load", "scroll", "resize", etc.

Code Examples:

// Click event listener on a button:
button.addEventListener("click", function() {
  console.log("Button clicked!");
});

// Mouseover event listener on an image:
image.addEventListener("mouseover", function() {
  this.style.opacity = 0.5; // Make image semi-transparent
});

// Keyboard event listener on a text input:
inputField.addEventListener("keydown", function(event) {
  if (event.key === "Enter") {
    console.log("Enter key pressed!");
  }
});
Enter fullscreen mode Exit fullscreen mode

Projects

Project 1: Interactive Image Gallery

const images = document.querySelectorAll(".gallery img");

images.forEach(image => {
  image.addEventListener("click", function() {
    // Enlarge the clicked image
    this.style.width = "300px";
    this.style.height = "auto";

    // Add a close button
    const closeButton = document.createElement("button");
    closeButton.textContent = "Close";
    closeButton.addEventListener("click", function() {
      image.style.width = "";
      image.style.height = "";
      this.remove(); // Remove the close button
    });
    image.parentElement.appendChild(closeButton);
  });
});
Enter fullscreen mode Exit fullscreen mode

Project 2: Form Validation with Real-Time Feedback

const form = document.getElementById("my-form");
const nameInput = document.getElementById("name");
const emailInput = document.getElementById("email");
const submitButton = document.getElementById("submit");

const nameError = document.getElementById("name-error");
const emailError = document.getElementById("email-error");

nameInput.addEventListener("input", function() {
  // Validate name as user types
  // ...
  nameError.textContent = ""; // Clear error message if valid
});

emailInput.addEventListener("input", function() {
  // Validate email as user types
  // ...
  emailError.textContent = ""; // Clear error message if valid
});

submitButton.addEventListener("click", function(event) {
  event.preventDefault(); // Prevent form submission

  // Check for validation errors
  // ...
  if (hasErrors) {
    // Display error messages
    return;
  }

  // Submit the form using JavaScript (e.g., AJAX)
});
Enter fullscreen mode Exit fullscreen mode

Project 3: Infinite Scroll with Load More Button

const loadMoreButton = document.getElementById("load-more");
const contentContainer = document.getElementById("content");

let currentPage = 1;

loadMoreButton.addEventListener("click", function() {
  currentPage++;

  // Fetch more content using JavaScript (e.g., AJAX)
  fetch(`/api/data?page=${currentPage}`)
    .then(response => response.json())
    .then(data => {
      // Append new content to the container
      contentContainer.innerHTML += data.html;
      // Check if there's more content to load
      if (!data.hasMore) {
        loadMoreButton.style.display = "none"; // Hide the button
      }
    })
    .catch(error => console.error(error));
});
Enter fullscreen mode Exit fullscreen mode

Bonus Tip: Resources and References for Event Handling:

  • MDN Web Docs: Comprehensive documentation on event listeners and handling different event types: https://developer.mozilla.org/en-US/docs/Web/Events
  • JavaScript30: Hands-on challenges for practicing event handling in various scenarios: https://javascript30.com/
  • FreeCodeCamp: Interactive lessons and exercises on user interaction and event listening: https://www.freecodecamp.org/news/javascript-projects-for-beginners/
  • Online Courses: Platforms like Coursera, Udemy, and Udacity offer courses on JavaScript and event-driven programming.
  • Books: "JavaScript: The Definitive Guide" by David Flanagan and "JavaScript for Kids" by Nick Morgan.
  • Community Forums and Stack Overflow: Find answers to specific questions and learn from other developers' experiences.

Additional Tips:

  • Use event delegation: Attach event listeners to parent elements for efficient handling of dynamically added or removed elements.
  • Prevent form submission: Use event.preventDefault() to prevent default browser behavior (e.g., form submission) and handle it with JavaScript.
  • Accessibility: Consider keyboard navigation and other accessibility best practices when designing interactions.
  • Experiment and have fun! Explore different event types and use your creativity to build interactive and engaging user experiences.

☕ Enjoyed this article? Support my work with a coffee: https://www.buymeacoffee.com/cqvuesleq

Also open for technical writing and frontend dev roles!

Top comments (0)