change event in EventListener doesnt trigger

So I made a small version of my problem. Here I am adding text into an input element. But when it is added it doesnt trigger the event listener.

function testFunction() {
  document.getElementById("testInput").addEventListener("change", () => {
    console.log("hi");
  });
}

function testText() {
  document.getElementById("testInput").value = "Hello there";
}

testFunction();
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="styles.css" />
    <title>Document</title>
  </head>
  <body>
    <script></script>
    <button onclick="testText()" style="height: 20px"></button>
    <input id="testInput" />
    <script src="script.js"></script>
  </body>
</html>

>Solution :

You need to create the event manually and use dispatchEvent() method to fire the event to the target element.

function testFunction() {
  document.getElementById("testInput").addEventListener("input", () => {
    console.log("hi");
  });
}

function testText() {
  document.getElementById("testInput").value = "Hello there";

  let event = new Event("input");
  document.getElementById("testInput").dispatchEvent(event);
}

testFunction();
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="styles.css" />
    <title>Document</title>
  </head>
  <body>
    <script></script>
    <button onclick="testText()" style="height: 20px"></button>
    <input id="testInput" />
    <script src="script.js"></script>
  </body>
</html>

Leave a Reply