| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/ja/docs/Web/API/EventTarget/addEventListener | [Back] [Original] |
Get to know MDN better
addEventListener() EventTarget
ElementDocumentWindow IDBRequest
:
addEventListener()
onXYZ addEventListener() handleEvent() EventTarget
addEventListener(type, listener)
addEventListener(type, listener, options)
addEventListener(type, listener, useCapture)
typelistenerEvent
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 handleEvent()
handleEvent() Event
fullscreenchange fullscreenerror
function handleEvent(event) {
if (event.type === "fullscreenchange") {
/* */
} else {
/* */
}
}
addEventListener() this currentTarget
myElement.addEventListener("click", function (e) {
console.log(this.className); // myElement className
console.log(e.currentTarget === this); // `true`
});
myElement.addEventListener("click", (e) => {
console.log(this.className); // : `this` `myElement`
console.log(e.currentTarget === this); // `false`
});
onclick HTML JavaScript addEventListener() this this
<table id="my-table" >
<!-- `this` table 'my-table' -->
</table>
<script>
function logID() {
console.log(this.id);
}
</script>
<table id="my-table" >
<!-- `this` -->
</table>
logID() this Window undefined
Function.prototype.bind() this
bind()
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()
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
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
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'
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)
passive true Event.preventDefault()
addEventListener() passive false wheelmousewheeltouchstarttouchmove passive WindowDocumentDocument.body true
passive false false
scroll passive
addEventListener()
<table id="outside">
<tbody>
<tr>
<td id="t1">one</td>
</tr>
<tr>
<td id="t2">two</td>
</tr>
</tbody>
</table>
// 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
<table id="outside">
<tbody>
<tr>
<td id="t1">one</td>
</tr>
<tr>
<td id="t2">two</td>
</tr>
</tbody>
</table>
// 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"
<table id="outside">
<tbody>
<tr>
<td id="t1">one</td>
</tr>
<tr>
<td id="t2">two</td>
</tr>
</tbody>
</table>
// 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()
<table id="outside">
<tbody>
<tr>
<td id="t1">one</td>
</tr>
<tr>
<td id="t2">two</td>
</tr>
</tbody>
</table>
// 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
<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>
.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;
}
.demo-logs {
width: 530px;
height: 16rem;
background-color: #dddddd;
overflow-x: auto;
padding: 1rem;
}
const clearBtn = document.querySelector(".clear-button");
const demoLogs = document.querySelector(".demo-logs");
function log(msg) {
demoLogs.innerText += `${msg}\n`;
}
clearBtn.addEventListener("click", () => {
demoLogs.innerText = "";
});
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
passive: preventDefault() once: <button id="example-button"></button>
<button id="reset-button"></button>
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>
<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>
#container {
width: 150px;
height: 200px;
overflow: scroll;
margin: 2rem 0;
padding: 0.4rem;
border: 1px solid black;
}
wheel passive passive
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 |
EventTargetAbortControllerAbortSignalAbstractRangeAttrCDATASectionCharacterDataCommentCustomEventDOMErrorDOMExceptionDOMImplementationDOMParserDOMTokenListDocumentDocumentFragmentDocumentTypeElementEventHTMLCollectionMutationObserverMutationRecordNamedNodeMapNodeNodeIteratorNodeListProcessingInstructionQuotaExceededErrorRangeShadowRootStaticRangeTextTreeWalkerXMLDocumentXPathEvaluatorXPathExpressionXPathResultXSLTProcessor| Web Proxy Viewer | New URL | Original Page |