Jump to content

JavaScript/Handling DOM events/Exercises

From Wikibooks, open books for an open world

Topic: Event handling

We use the following HTML page for the exercises.

<!DOCTYPE html> <html> <head> <script>  function registerAllEvents() {  // ..  }  </script> <style>  .container {  display: grid;  grid-template-columns: 49% 49%;  grid-template-rows: 10em 10em;  gap: 1%;  background-color: AliceBlue;  margin: 2em;  padding: 2em;  }  .cell {  display: flex;  align-items: center;  justify-content: center;  background-color: blue;  font-size: 3em;  }  </style> </head> <body id="body" onload="registerAllEvents()"> <div class="container"> <div id="divA" class="cell">A</div> <div id="divB" class="cell">B</div> <div id="divC" class="cell">C</div> <div id="divD" class="cell">D</div> </body> </html> 



1. Implement a 'click' event handler that toggles the 'A' area between the background colors 'silver' and 'gold'.

Click to see solution
 function registerAllEvents() {  document.getElementById("divA").addEventListener('click', handleDivA);  }  function handleDivA(evt) {  // toggle between silver and gold  const elem = evt.target;  if (elem.style.backgroundColor !== 'silver') {  elem.setAttribute("style", "background-color: silver");  } else {  elem.setAttribute("style", "background-color: gold");  }  } 



2. Implement a 'mouseover' event handler. With each mouse movement on the 'B' area its background color changes from "blue" to "lime", "red", "yellow", "green", and back to "blue".

Click to see solution
 function registerAllEvents() {  document.getElementById("divB").addEventListener('mousemove', handleDivB);   }  function handleDivB(evt) {  // rotate in a palette of colors  const elem = evt.target;  switch (elem.style.backgroundColor) {  case "blue":  elem.setAttribute("style", "background-color: lime");  break;  case "lime":  elem.setAttribute("style", "background-color: red");  break;  case "red":  elem.setAttribute("style", "background-color: yellow");  break;  case "yellow":  elem.setAttribute("style", "background-color: green");  break;  default:  elem.setAttribute("style", "background-color: blue");  break;  }  } 



3. Implement two event handlers for the 'C' area, 'mouseenter' and 'mouseleave'. When the mouse pointer enters the area, its background color changes to "red"; when it leaves the area, its background color changes to "green".

Click to see solution
 function registerAllEvents() {  // two event handlers for the same element  document.getElementById("divC").addEventListener('mouseenter', handleDivC_1);  document.getElementById("divC").addEventListener('mouseleave', handleDivC_2);  }  function handleDivC_1(evt) {  // switch to a certain color  evt.target.setAttribute("style", "background-color: red");  }  function handleDivC_2(evt) {  // switch to a certain color  evt.target.setAttribute("style", "background-color: green");  } 



4. Bring the above 3 solutions together. We will have a page that reacts on 4 different event types.

Click to see solution
 function registerAllEvents() {  // register different event types  document.getElementById("divA").addEventListener('click', handleDivA);  document.getElementById("divB").addEventListener('mousemove', handleDivB);   // two event handler for the same element  document.getElementById("divC").addEventListener('mouseenter', handleDivC_1);  document.getElementById("divC").addEventListener('mouseleave', handleDivC_2);  }  function handleDivA(evt) {  // toggle between silver and gold  const elem = evt.target;  if (elem.style.backgroundColor !== 'silver') {  elem.setAttribute("style", "background-color: silver");  } else {  elem.setAttribute("style", "background-color: gold");  }  }  function handleDivB(evt) {  // rotate in a palette of colors  const elem = evt.target;  switch (elem.style.backgroundColor) {  case "blue":  elem.setAttribute("style", "background-color: lime");  break;  case "lime":  elem.setAttribute("style", "background-color: red");  break;  case "red":  elem.setAttribute("style", "background-color: yellow");  break;  case "yellow":  elem.setAttribute("style", "background-color: green");  break;  default:  elem.setAttribute("style", "background-color: blue");  break;  }  }  function handleDivC_1(evt) {  // switch to a certain color  evt.target.setAttribute("style", "background-color: red");  }  function handleDivC_2(evt) {  // switch to a certain color  evt.target.setAttribute("style", "background-color: green");  }