[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/ja/docs/Web/API/EventTarget/addEventListener [Back]  [Original]

EventTarget: addEventListener() - Web API | MDN

MDN Web Docs

View in English Always switch to English

EventTarget: addEventListener()

Baseline *

20157

*

:

addEventListener() EventTarget

ElementDocumentWindow IDBRequest

: addEventListener()

  • 1 JavaScript
  • onXYZ
  • HTML SVG

addEventListener() handleEvent() EventTarget

: addEventListener 2

EventTarget

js
addEventListener(type, listener)
addEventListener(type, listener, options)
addEventListener(type, listener, useCapture)

type

listener

Event null handleEvent() JavaScript

options

capture

DOM EventTarget (dispatch) listener false

once

listener true listener false

passive

true listener preventDefault() preventDefault()

false Safari wheelmousewheeltouchstarttouchmove true

signal

AbortSignal AbortSignal AbortController abort() AbortSignal

useCapture

DOM EventTarget listener 2 DOM JavaScript Event order useCapture false

:

wantsUntrusted

Firefox (Gecko) true () ( false true )

(undefined)

handleEvent()

handleEvent() Event

fullscreenchange fullscreenerror

js
function handleEvent(event) {
  if (event.type === "fullscreenchange") {
    /*  */
  } else {
    /*  */
  }
}

"this"

addEventListener() this currentTarget

js
myElement.addEventListener("click", function (e) {
  console.log(this.className); // myElement  className 
  console.log(e.currentTarget === this); // `true` 
});

this

js
myElement.addEventListener("click", (e) => {
  console.log(this.className); // : `this`  `myElement` 
  console.log(e.currentTarget === this); // `false` 
});

onclick HTML JavaScript addEventListener() this this

html
<table id="my-table" >
  <!-- `this`  table 'my-table'  -->
  
</table>

this

html
<script>
  function logID() {
    console.log(this.id);
  }
</script>
<table id="my-table" >
  <!-- `this`  -->
  
</table>

logID() this Window undefined

bind() "this"

Function.prototype.bind() this

bind()

js
class Something {
  name = "Something Good";
  constructor(element) {
    // bind  `this`  `onclick2` 
    this.onclick2 = this.onclick2.bind(this);
    element.addEventListener("click", this.onclick1);
    element.addEventListener("click", this.onclick2); // Trick
  }
  onclick1(event) {
    console.log(this.name); // undefined`this` 
  }
  onclick2(event) {
    console.log(this.name); // 'Something Good'`this`  Something 
  }
}

const s = new Something(document.body);

handleEvent()

js
class Something {
  name = "Something Good";
  constructor(element) {
    //  `this`  this.handleEvent 
    element.addEventListener("click", this);
    element.addEventListener("dblclick", this);
  }
  handleEvent(event) {
    console.log(this.name); // 'Something Good'
    switch (event.type) {
      case "click":
        // 
        break;
      case "dblclick":
        // 
        break;
    }
  }
}

const s = new Something(document.body);

this this

js
class SomeClass {
  name = "Something Good";

  register() {
    window.addEventListener("keydown", (e) => {
      this.someMethod(e);
    });
  }

  someMethod(e) {
    console.log(this.name);
    switch (e.code) {
      case "ArrowUp":
        // 
        break;
      case "ArrowDown":
        // 
        break;
    }
  }
}

const myObject = new SomeClass();
myObject.register();

Event Event 1

js
const myButton = document.getElementById("my-button-id");
let someString = "Data";

myButton.addEventListener("click", () => {
  console.log(someString);
  //  'Data' 
  // 2  'Data Again' 

  someString = "Data Again";
});

console.log(someString); // : 'Data' 'Data Again' 

js
const elems = document.getElementsByTagName("*");

//  1
for (const elem of elems) {
  elem.addEventListener("click", (e) => {
    // 
  });
}

//  2
function processEvent(e) {
  // 
}

for (const elem of elems) {
  elem.addEventListener("click", processEvent);
}

1 2 1 removeEventListener() 2 processEvent myElement.removeEventListener("click", processEvent, false)

wheel Event.preventDefault()

passive true Event.preventDefault()

addEventListener() passive false wheelmousewheeltouchstarttouchmove passive WindowDocumentDocument.body true

passive false false

scroll passive

addEventListener()

HTML

html
<table id="outside">
  <tbody>
    <tr>
      <td id="t1">one</td>
    </tr>
    <tr>
      <td id="t2">two</td>
    </tr>
  </tbody>
</table>

JavaScript

js
// t2 
function modifyText() {
  const t2 = document.getElementById("t2");
  const isNodeThree = t2.firstChild.nodeValue === "three";
  t2.firstChild.nodeValue = isNodeThree ? "two" : "three";
}

//  table 
const el = document.getElementById("outside");
el.addEventListener("click", modifyText);

modifyText() click addEventListener() modifyText()

addEventListener() AbortSignal

HTML

html
<table id="outside">
  <tbody>
    <tr>
      <td id="t1">one</td>
    </tr>
    <tr>
      <td id="t2">two</td>
    </tr>
  </tbody>
</table>

JavaScript

js
//  table 
const controller = new AbortController();
const el = document.getElementById("outside");
el.addEventListener("click", modifyText, { signal: controller.signal });

// t2 
function modifyText() {
  const t2 = document.getElementById("t2");
  if (t2.firstChild.nodeValue === "three") {
    t2.firstChild.nodeValue = "two";
  } else {
    t2.firstChild.nodeValue = "three";
    controller.abort(); // "three" 
  }
}

2 "three" addEventListener() AbortController abort() "three"

HTML

html
<table id="outside">
  <tbody>
    <tr>
      <td id="t1">one</td>
    </tr>
    <tr>
      <td id="t2">two</td>
    </tr>
  </tbody>
</table>

JavaScript

js
// t2 
function modifyText(newText) {
  const t2 = document.getElementById("t2");
  t2.firstChild.nodeValue = newText;
}

//  table 
const el = document.getElementById("outside");
el.addEventListener("click", function () {
  modifyText("four");
});

modifyText()

HTML

html
<table id="outside">
  <tbody>
    <tr>
      <td id="t1">one</td>
    </tr>
    <tr>
      <td id="t2">two</td>
    </tr>
  </tbody>
</table>

JavaScript

js
// t2 
function modifyText(newText) {
  const t2 = document.getElementById("t2");
  t2.firstChild.nodeValue = newText;
}

//  table 
const el = document.getElementById("outside");
el.addEventListener("click", () => {
  modifyText("four");
});

this JavaScript this this

options

HTML

html
<div class="outer">
  outer, once & none-once
  <div class="middle" target="_blank">
    middle, capture & none-capture
    <a class="inner1" href="https://www.mozilla.org" target="_blank">
      inner1,  & preventDefault
    </a>
    <a class="inner2" href="https://developer.mozilla.org/" target="_blank">
      inner2,  & preventDefault
    </a>
  </div>
</div>
<hr />
<button class="clear-button"></button>
<section class="demo-logs"></section>

CSS

css
.outer,
.middle,
.inner1,
.inner2 {
  display: block;
  width: 520px;
  padding: 15px;
  margin: 15px;
  text-decoration: none;
}
.outer {
  border: 1px solid red;
  color: red;
}
.middle {
  border: 1px solid green;
  color: green;
  width: 460px;
}
.inner1,
.inner2 {
  border: 1px solid purple;
  color: purple;
  width: 400px;
}

JavaScript

js
const outer = document.querySelector(".outer");
const middle = document.querySelector(".middle");
const inner1 = document.querySelector(".inner1");
const inner2 = document.querySelector(".inner2");

const capture = {
  capture: true,
};
const noneCapture = {
  capture: false,
};
const once = {
  once: true,
};
const noneOnce = {
  once: false,
};
const passive = {
  passive: true,
};
const nonePassive = {
  passive: false,
};

outer.addEventListener("click", onceHandler, once);
outer.addEventListener("click", noneOnceHandler, noneOnce);
middle.addEventListener("click", captureHandler, capture);
middle.addEventListener("click", noneCaptureHandler, noneCapture);
inner1.addEventListener("click", passiveHandler, passive);
inner2.addEventListener("click", nonePassiveHandler, nonePassive);

function onceHandler(event) {
  log("outeronce");
}
function noneOnceHandler(event) {
  log("outer once\n");
}
function captureHandler(event) {
  //event.stopImmediatePropagation();
  log("middlecapture");
}
function noneCaptureHandler(event) {
  log("middle capture");
}
function passiveHandler(event) {
  //  preventDefault 
  event.preventDefault();
  log("inner1passive");
}
function nonePassiveHandler(event) {
  event.preventDefault();
  //event.stopPropagation();
  log("inner2 passive");
}

options 2

HTML

html
<button id="example-button"></button>
<button id="reset-button"></button>

JavaScript

js
const buttonToBeClicked = document.getElementById("example-button");

const resetButton = document.getElementById("reset-button");

// 
const initialText = buttonToBeClicked.textContent;

// 
const clickedText = "";

// 
// 
function eventListener() {
  buttonToBeClicked.textContent = clickedText;
}

function addListener() {
  buttonToBeClicked.addEventListener("click", eventListener, {
    passive: true,
    once: true,
  });
}

// 
// 
resetButton.addEventListener("click", () => {
  buttonToBeClicked.textContent = initialText;
  addListener();
});

addListener();

passive <div>

HTML

html
<div id="container">
  <p>
    But down there it would be dark now, and not the lovely lighted aquarium she
    imagined it to be during the daylight hours, eddying with schools of tiny,
    delicate animals floating and dancing slowly to their own serene currents
    and creating the look of a living painting. That was wrong, in any case. The
    ocean was different from an aquarium, which was an artificial environment.
    The ocean was a world. And a world is not art. Dorothy thought about the
    living things that moved in that world: large, ruthless and hungry. Like us
    up here.
  </p>
</div>

<div>
  <input type="checkbox" id="passive" name="passive" checked />
  <label for="passive"></label>
</div>

JavaScript

wheel passive passive

js
const passive = document.querySelector("#passive");
const container = document.querySelector("#container");

passive.addEventListener("change", (event) => {
  container.removeEventListener("wheel", wheelHandler);
  container.addEventListener("wheel", wheelHandler, {
    passive: passive.checked,
    once: true,
  });
});

container.addEventListener("wheel", wheelHandler, {
  passive: true,
  once: true,
});

function wheelHandler() {
  function isPrime(n) {
    for (let c = 2; c <= Math.sqrt(n); ++c) {
      if (n % c === 0) {
        return false;
      }
    }
    return true;
  }

  const quota = 1000000;
  const primes = [];
  const maximum = 1000000;

  while (primes.length < quota) {
    const candidate = Math.floor(Math.random() * (maximum + 1));
    if (isPrime(candidate)) {
      primes.push(candidate);
    }
  }

  console.log(primes);
}

DOM
# ref-for-dom-eventtarget-addeventlistener


Web Proxy Viewer  |  New URL  |  Original Page