Baseline Widely available *
EventTarget
ì¸í°íì´ì¤ì addEventListener()
ë©ìëë ì§ì í ì íì ì´ë²¤í¸ë¥¼ ëìì´ ìì í ëë§ë¤ í¸ì¶í í¨ì를 ì¤ì í©ëë¤.
ì¼ë°ì ì¸ ëìì Element
, Document
, Window
ì§ë§, XMLHttpRequest
ì ê°ì´ ì´ë²¤í¸ë¥¼ ì§ìíë 모ë ê°ì²´ê° ëìì´ ë ì ììµëë¤.
ì°¸ê³ : ì´ë²¤í¸ ìì 기ë ë¤ë¥¸ ë°©ë²ì¼ë¡ë ì¶ê°í ì ìì§ë§, addEventListener()
ë©ìë를 ì¬ì©í´ì ë¤ìì ì¥ì ì ë리ë ê²ì´ ì¢ìµëë¤.
onXYZ
ìì±ê³¼ ë¬ë¦¬, ìì ê¸°ê° ì´ë¤ ì´ë²¤í¸ ì í ë¨ê³(캡ì²ë§ vs. ë²ë¸ë§)ì ëìí´ì¼ íëì§ ì¡°ì í ì ììµëë¤.addEventListener()
ë©ìëë ì§ì í ì´ë²¤í¸ ì íìEventTarget
ìì 기 리ì¤í¸ì EventListener
를 구íí í¨ì ëë ê°ì²´ë¥¼ ì¶ê°íë ë°©ìì¼ë¡ ëìí©ëë¤. ì¶ê°íë ¤ë í¨ì ëë ê°ì²´ê° ì´ë¯¸ ìì 기 리ì¤í¸ì í¬í¨ëì´ ìë ê²½ì°ìë ì¶ê°íì§ ìì¼ë¯ë¡ ìì 기ë ì¤ë³µì¼ë¡ ë±ë¡ëì§ ììµëë¤.
ì¶ê°í ìì 기를 ë°ëì removeEventListener()
ë¡ ì§ì ì ê±°í´ì¼ íë ê²ì ìëëë¤.
ì°¸ê³ : ë ê°ì ìµëª
í¨ìë, í¨ì ë³¸ë¬¸ì´ ëì¼íëë¼ë, addEventListener()
ì ìì´ íì ìë¡ ë¤ë¥¸ í¨ìë¡ ì·¨ê¸ëë¯ë¡ ëì ëìì í ëìì ì´ë²¤í¸ ìì ê¸°ë¡ ë¶ì°©í ì ììµëë¤.
ì¬ì¤, 본문ì ë´ì©ì´ íì ëì¼íê³ ë¶ë³íëë¼ë, ê·¸ 본문ì ì¬ì©í´ ì ìíë ê°ê°ì ìµëª í¨ìë íì ìë¡ë¥¼ 구ë³í ì ìë ë³ëì í¨ìì ëë¤. ë°ë³µë¬¸ ë´ìì ì ìíë ê²½ì°ìë ë§ì°¬ê°ì§ì ëë¤.
ì´ì ê°ì´ ë°ë³µì ì¼ë¡ ìµëª í¨ì를 ì ìíê² ëë©´ 문ì ê° ë ì ììµëë¤. ìëì ë©ëª¨ë¦¬ 문ì 를 íì¸íì¸ì.
EventTarget
ì ë¶ì°©ë ì´ë²¤í¸ ìì ê¸°ê° ì´ë²¤í¸ ì²ë¦¬ ì¤ì ìë¡ì´ ìì 기를 ë±ë¡íëë¼ë, íì¬ ì²ë¦¬ ì¤ì¸ ì´ë²¤í¸ë¡ë ê·¸ ìì ê¸°ê° ë°ëíì§ ììµëë¤. ê·¸ë¬ë ë²ë¸ë§ ë¨ê³ì²ë¼ ì´íì ì´ë²¤í¸ ì²ë¦¬ íë¦ììë ë°ëí ì ììµëë¤.
addEventListener(type, listener);
addEventListener(type, listener, options);
addEventListener(type, listener, useCapture);
매ê°ë³ì
type
ìì í ì´ë²¤í¸ ì íì ëíë´ë ëì문ì êµ¬ë¶ ë¬¸ìì´ì ëë¤.
listener
ì§ì í ì´ë²¤í¸(Event
ì¸í°íì´ì¤ë¥¼ 구íí ê°ì²´)를 ìì í ê°ì²´ì
ëë¤. handleEvent()
ë©ìë를 í¬í¨íë ê°ì²´ ëë JavaScript í¨ìì¬ì¼ í©ëë¤. ì´ë²¤í¸ ìì 기 ì½ë°±ìì ì½ë°± ìì²´ì ëí ì 보를 ë ììë³´ì¸ì.
options
Optional
ì´ë²¤í¸ ìì 기ì í¹ì§ì ì§ì í ì ìë ê°ì²´ì ëë¤. ê°ë¥í ìµì ì ë¤ìê³¼ ê°ìµëë¤.
capture
ì´ë²¤í¸ ëìì DOM í¸ë¦¬ íìì ìì¹í ìì EventTarget
ì¼ë¡ ì´ë²¤í¸ê° ì ë¬ë기 ì ì, ì´ ìì ê¸°ê° ë¨¼ì ë°ëë¼ì¼ í¨ì ëíë´ë ë¶ë¦¬ì¸ ê°ì
ëë¤. ëª
ìíì§ ìì ê²½ì° ê¸°ë³¸ ê°ì false
ì
ëë¤.
once
ìì ê¸°ê° ìµë í ë²ë§ ëìí´ì¼ í¨ì ëíë´ë ë¶ë¦¬ì¸ ê°ì
ëë¤. true
를 ì§ì í ê²½ì°, ìì ê¸°ê° ë°ëí íì ì¤ì¤ë¡ë¥¼ ëììì ì ê±°í©ëë¤. ëª
ìíì§ ìì ê²½ì° ê¸°ë³¸ ê°ì false
ì
ëë¤.
passive
true
ì¼ ê²½ì°, ì´ ìì 기 ë´ìì preventDefault()
를 ì ë í¸ì¶íì§ ìì ê²ìì ëíë´ë ë¶ë¦¬ì¸ ê°ì
ëë¤. ì´ ê°ì´ true
ì¸ë° ìì ê¸°ê° preventDefault()
를 í¸ì¶íë ê²½ì°, ì¬ì©ì ìì´ì í¸ë ì½ìì ê²½ê³ ë¥¼ ì¶ë ¥íë ê² ì¸ì ìë¬´ë° ëìë íì§ ììµëë¤. ëª
ìíì§ ìì ê²½ì°ì 기본 ê°ì false
ì§ë§, Safariì Internet Explorer를 ì ì¸í ë¸ë¼ì°ì ìì wheel
, mousewheel
, touchstart
, touchmove
ì´ë²¤í¸ììì 기본 ê°ì true
ì
ëë¤. í¨ìë¸ ìì ê¸°ë¡ ì¤í¬ë¡¤ ì±ë¥ í¥ììì ì´ ê°ì ëí´ ë ììë³´ì¸ì.
signal
AbortSignal
ì
ëë¤. ì§ì í AbortSignal
ê°ì²´ì abort()
ë©ìë를 í¸ì¶íë©´ ì´ ìì ê¸°ê° ì ê±°ë©ëë¤. ëª
ìíì§ ìì ê²½ì° ì´ë²¤í¸ ìì ê¸°ê° ì무 AbortSignal
ìë ì°ê²°ëì§ ììµëë¤.
useCapture
Optional
ì´ë²¤í¸ ëìì DOM í¸ë¦¬ íìì ìì¹í ìì EventTarget
ì¼ë¡ ì´ë²¤í¸ê° ì ë¬ë기 ì ì, ì´ ìì ê¸°ê° ë¨¼ì ë°ëë¼ì¼ í¨ì ëíë´ë ë¶ë¦¬ì¸ ê°ì
ëë¤. ìº¡ì² ëª¨ëì¸ ìì 기ë DOM í¸ë¦¬ì ì쪽ì¼ë¡ ë²ë¸ë§ ì¤ì¸ ì´ë²¤í¸ì ìí´ì ë°ëíì§ ììµëë¤. ì´ë²¤í¸ ë²ë¸ë§ê³¼ 캡ì²ë§ì ì¡°ì-ìì ê´ê³ë¥¼ ê°ì§ ë ê°ì ììê° ëì¼í ì´ë²¤í¸ ì íì ëí ìì 기를 ê°ì§ê³ ìì ë, ë ììì ì´ë²¤í¸ê° ì íëë ë°©ë²ì ë§í©ëë¤. ì´ë²¤í¸ ì í 모ëì ë°ë¼ ë ìì ì¤ ì´ë²¤í¸ë¥¼ 먼ì ìì íë ìª½ì´ ë¬ë¼ì§ëë¤. DOM Level 3 Eventsì JavaScript Event ìììì ìì¸í ì¤ëª
ì íì¸íì¸ì. 기본 ê°ì false
ì
ëë¤.
ì°¸ê³ : ì´ë²¤í¸ì ëìì ë¶ì°©ë ìì 기ì ê²½ì° ìº¡ì²ë§ë, ë²ë¸ë§ ë¨ê³ë ìë ë³ëì ë¨ê³ì ë°ëí©ëë¤. ìº¡ì² ëª¨ëì ìì 기ë ìº¡ì² ëª¨ëê° ìë ë¤ë¥¸ 모ë ìì ê¸°ë³´ë¤ ìì ë°ëí©ëë¤.
wantsUntrusted
Optional ë¹íì¤
Firefox(Gecko)ììë§ ì¬ì©í ì ììµëë¤. true
ì¼ ê²½ì° ìì ê¸°ê° ì¹ ì½í
ì¸ ìì ë°ì¡íë í©ì± ì´ë²¤í¸ë¥¼ ìì í ì ììµëë¤. (기본 ê°ì ë¸ë¼ì°ì í¬ë¡¬ììë false
, ì¼ë° ì¹ íì´ì§ììë true
ì
ëë¤.) ë¸ë¼ì°ì íì¥, ëë ë¸ë¼ì°ì ìì²´ ì½ëìì ì ì©íê² ì¬ì©í ì ììµëë¤.
ìì (undefined
).
addEventListener()
ì ì§ì íë ì´ë²¤í¸ ìì 기ë ì½ë°± í¨ìê±°ë, ì½ë°±ì¼ë¡ ìëí handleEvent()
ë©ìë를 í¬í¨íë ê°ì²´ì
ëë¤.
ì½ë°± í¨ì ìì²´ë handleEvent()
ë©ìëì ê°ì 매ê°ë³ì, ê°ì ë°í ê°ì ê°ì§ëë¤. ì¦, ì½ë°± í¨ìë ë°ìí ì´ë²¤í¸ë¥¼ ì¤ëª
íë Event
ê¸°ë° ê°ì²´ë¥¼ ì ì¼í 매ê°ë³ìë¡ ë°ê³ , ì무ê²ë ë°ííì§ ììµëë¤.
ë¤ìì fullscreenchange
ì fullscreenerror
ë ì íì ì´ë²¤í¸ë¥¼ ëìì ì²ë¦¬í ì ìë ì´ë²¤í¸ ì²ë¦¬ ì½ë°±ì ìì ì
ëë¤.
function eventHandler(event) {
if (event.type == "fullscreenchange") {
/* ì ì²´íë©´ ì¬ë¶ ë³í ì²ë¦¬ */
} /* fullscreenerror */ else {
/* ì ì²´íë©´ ì¤ë¥ ì²ë¦¬ */
}
}
ìµì
ì§ìì ìì íê² ê°ì§í기
과거 DOM ëª
ì¸ìì addEventListener()
ì ì¸ ë²ì§¸ ë§¤ê° ë³ìê° ìº¡ì² ì¬ë¶ë¥¼ ëíë´ë ë¶ë¦¬ì¸ ê°ì´ììµëë¤. ê·¸ë¬ë ìê°ì´ ì§ë¨ì ë°ë¼ ë ë§ì ìµì
ì´ íìíë¤ë ê²ì´ ë¶ëª
í´ì¡ìµëë¤. ë©ìë 매ê°ë³ì를 ê³ì ë리면 ì íì ì¸ ìµì
ì ëíë´ë 매ê°ë³ì ì²ë¦¬ê° ì´ë ¤ìì§ ê²ì´ë¯ë¡, ì´ì ì¸ ë²ì§¸ 매ê°ë³ìë ë¶ë¦¬ì¸ ê°ì´ ìëë¼ ì´ë²¤í¸ ìì 기ì ë¤ìí ì±ì§ì ì¤ëª
íë ìµì
ê°ì²´ê° ëìµëë¤.
구í ë¸ë¼ì°ì ììë (ê·¸ë¦¬ê³ ì¼ë¶ ìëì ì¼ë¡ ë ì¤ëë ë¸ë¼ì°ì ììë) ì¬ì í ì¸ ë²ì§¸ 매ê°ë³ìì ì¤ë¡ì§ ë¶ë¦¬ì¸ ê°ë§ 기ëíê³ ìì¼ë¯ë¡ ë¸ë¼ì°ì ê° ì°¨ì´ì ì ì²ë¦¬í ì ìë ì½ë를 ìì±í íìê° ììµëë¤. íìí ìµì ì ëí ê¸°ë¥ ê°ì§ ì½ë를 ì¬ì©íì¸ì.
ì를 ë¤ì´, passive
ìµì
ì ì§ì ì¬ë¶ë¥¼ ììë³´ê³ ì¶ë¤ê³ ê°ì íê² ìµëë¤.
let passiveSupported = false;
try {
const options = {
get passive() {
// ë¸ë¼ì°ì ê° passive ìì±ì ì ê·¼íë ¤ê³ íë©´ ì´ í¨ìê° ì¤íë¨
passiveSupported = true;
return false;
},
};
window.addEventListener("test", null, options);
window.removeEventListener("test", null, options);
} catch (err) {
passiveSupported = false;
}
ìì ì½ëë passive
ìì±ì ëí ì ê·¼ì í¨ì를 ê°ì§ options
ê°ì²´ë¥¼ ìì±íê³ , passive
ì ê·¼ìë ìì ì´ í¸ì¶ëë ìê° passiveSupported
íëê·¸ ë³ì를 true
ë¡ ì¤ì í©ëë¤. ì´ ë§ì, passiveSupported
ê° true
ë¼ë©´ ë¸ë¼ì°ì ê° options
ê°ì²´ì passive
ìì±ì íì¸íë¤ë ë»ì´ê³ , false
ë©´ íì¸íì§ ìëë¤ë ë»ì
ëë¤. ê·¸ ìëììë addEventListener()
를 ì¬ì©í´ ê°ì§ ì´ë²¤í¸ ì²ë¦¬ê¸°ë¥¼ ë±ë¡, ë¸ë¼ì°ì ê° ì¸ ë²ì§¸ 매ê°ë³ì ê°ì²´ë¥¼ ì¸ìí ì ìëì§ íì¸íê³ , removeEventListener()
ë¡ ì 리í©ëë¤. (ì´ë²¤í¸ ìì 기ë ë°ëí ì¼ì´ ìì¼ë¯ë¡ null
ì ì§ì í´ë 무방í©ëë¤.)
ì´ ë°©ë²ì¼ë¡ 모ë ìµì ì ëí ì§ì ì¬ë¶ë¥¼ íì¸í ì ììµëë¤. ì ì½ëì ë¹ì·íê², íì¸íë ¤ë ìµì ì ëí ì ê·¼ì를 ì¶ê°íê¸°ë§ íë©´ ë©ëë¤.
ê·¸ í, ì¤ì ë¡ íë그를 ì¬ì©í ë ìëì ê°ì´ í ì ììµëë¤.
someElement.addEventListener(
"mouseup",
handleMouseUp,
passiveSupported ? { passive: true } : false,
);
ì ì½ëììë {domxref("Element/mouseup_event", "mouseup")}} ì´ë²¤í¸ì ëí ìì 기를 someElement
ììì ì¶ê°íê³ ììµëë¤. ì¸ ë²ì§¸ 매ê°ë³ì를 ì´í´ë³´ë©´, ë§ì½ passiveSupported
ê° true
ì¼ ê²½ì° passive
를 true
ë¡ ì§ì í ìµì
ê°ì²´ë¥¼ ì§ì íê³ ìì¼ë©°, passiveSupported
ê° false
ì¼ ê²½ì°, ì¸ ë²ì§¸ 매ê°ë³ìë ë¶ë¦¬ì¸ ê°ì´ì´ì¼ í ê²ì´ë¯ë¡ useCapture
ì ëí ê°ì¸ false
를 ì§ì íë 모ìµì
ëë¤.
ì§ì ììë´ë ëì Modernizrë Detect It ë± ìëíí° ë¼ì´ë¸ë¬ë¦¬ë¥¼ ì¬ì©í´ ê¸°ë¥ ê°ì§ë¥¼ í ìë ììµëë¤.
Web Incubator Community Groupì EventListenerOptions
ì ëí ê¸ìì ë ìì¸í ì 보를 ììë³´ì¸ì.
ì´ ìì ë addEventListener()
를 ì¬ì©íì¬ ììì ëí ë§ì°ì¤ í´ë¦ì ê°ì§íë ë°©ë²ì ë³´ì¬ì¤ëë¤.
<table id="outside">
<tr>
<td id="t1">one</td>
</tr>
<tr>
<td id="t2">two</td>
</tr>
</table>
JavaScript
// t2ì ì½í
ì¸ ë¥¼ ë°ê¾¸ë í¨ì
function modifyText() {
const t2 = document.getElementById("t2");
if (t2.firstChild.nodeValue == "three") {
t2.firstChild.nodeValue = "two";
} else {
t2.firstChild.nodeValue = "three";
}
}
// íì ì´ë²¤í¸ ìì 기 ì¶ê°
const el = document.getElementById("outside");
el.addEventListener("click", modifyText, false);
ì ì½ëì modifyText()
ê° addEventListener()
ë¡ ì¶ê°íë click
ì´ë²¤í¸ì ìì 기ì
ëë¤. í ììì ì´ë를 í´ë¦íë , í´ë¦ ì´ë²¤í¸ë ë²ë¥¼ë§ì íµí´ ì íëë¤ê° modifyText()
를 ë°ëíê² ë©ëë¤.
ì´ ìì ë AbortSignal
ë¡ ì¤ë¨í ì ìë addEventListener()
ì 모ìµì ë³´ì
ëë¤.
<table id="outside">
<tr>
<td id="t1">one</td>
</tr>
<tr>
<td id="t2">two</td>
</tr>
</table>
JavaScript
// íì ì¤ë¨ ê°ë¥í ìì 기 ì¶ê°
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"ê° ëë©´ ìì 기 ì ê±°
}
}
ì´ ìì ë ìì 첫 ë²ì§¸ ìì 를 ìì í´ì, íì ë ë²ì§¸ í ë´ì©ì´ "three"ê° ëë©´ addEventListener()
ì ìµì
ì ì§ì í AbortSignal
ì abort()
를 í¸ì¶í©ëë¤. ê·¸ ê²°ê³¼ë¡ í´ë¦ ì´ë²¤í¸ ìì ê¸°ê° í´ì ëê³ , ë ë²ì§¸ íì ë´ì©ì "three"ìì ë°ëì§ ìê² ë©ëë¤.
ì¬ê¸°ì ìµëª í¨ì를 ì¬ì©í´ ì´ë²¤í¸ ìì 기ì 매ê°ë³ì를 ì§ì íë ë°©ë²ì ë³´ì ëë¤.
HTML<table id="outside">
<tr>
<td id="t1">one</td>
</tr>
<tr>
<td id="t2">two</td>
</tr>
</table>
JavaScript
// t2ì ì½í
ì¸ ë¥¼ ë°ê¾¸ë í¨ì
function modifyText(new_text) {
const t2 = document.getElementById("t2");
t2.firstChild.nodeValue = new_text;
}
// íì ì´ë²¤í¸ ìì 기 ì¶ê°
const el = document.getElementById("outside");
el.addEventListener(
"click",
function () {
modifyText("four");
},
false,
);
addEventListener()
í¸ì¶ì ì´í´ë³´ë©´, ì¤ì ë¡ ì´ë²¤í¸ì ë°ìí modifyText()
í¨ìì 매ê°ë³ì를 ì ê³µíë ì½ëê° ìµëª
í¨ìì ìí´ ìº¡ìíë 모ìµì ë³¼ ì ììµëë¤.
ì´ ìì ë íì´í í¨ì를 ì¬ì©í´ì ê°ë¨í ì´ë²¤í¸ ìì 기를 구ííë 모ìµì ë³´ì ëë¤.
HTML<table id="outside">
<tr>
<td id="t1">one</td>
</tr>
<tr>
<td id="t2">two</td>
</tr>
</table>
JavaScript
// t2ì ì½í
ì¸ ë¥¼ ë°ê¾¸ë í¨ì
function modifyText(new_text) {
const t2 = document.getElementById("t2");
t2.firstChild.nodeValue = new_text;
}
// íì´í í¨ì를 ì¬ì©í ì´ë²¤í¸ ìì 기를 íì ì¶ê°
const el = document.getElementById("outside");
el.addEventListener(
"click",
() => {
modifyText("four");
},
false,
);
ê²°ê³¼
íì´í í¨ìì ìµëª
í¨ìë ë¹ì·íì§ë§, this
ë°ì¸ë©ì ì°¨ì´ê° ìë¤ë ì¬ì¤ì 주ìí´ì¼ í©ëë¤. ìµëª
í¨ì(ì ë¤ë¥¸ 모ë ì íµì ì¸ JavaScript í¨ì)ë ì¤ì¤ë¡ì this
ë°ì¸ë©ì ìì±íì§ë§, íì´í í¨ìë ìì ì í¬í¨íê³ ìë í¨ìì this
ë°ì¸ë©ì ììí©ëë¤.
ë°ë¼ì íì´í í¨ì를 í¬í¨í í¨ìì ë³ìì ìì를 ì´ë²¤í¸ ì²ë¦¬ ì½ëììë ì¬ì©í ì ììµëë¤.
ìµì ê°ì²´ ì¬ì©í기 HTML<div class="outer">
ë°ê¹¥, ì¼íì© & ë¤íì©
<div class="middle" target="_blank">
ì¤ê°, ìº¡ì² & ë¹ ìº¡ì²
<a class="inner1" href="https://www.mozilla.org" target="_blank">
ë´ë¶ 1, í¨ìë¸ & (íì©ëì§ ìì) preventDefault
</a>
<a class="inner2" href="https://developer.mozilla.org/" target="_blank">
ë´ë¶ 2, ë¹ í¨ìë¸ & preventDefault (ì íì´ì§ê° ì´ë¦¬ì§ ìì)
</a>
</div>
</div>
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
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) {
alert("ë°ê¹¥, ì¼íì©");
}
function noneOnceHandler(event) {
alert("ë°ê¹¥, ë¤íì©, 기본 ê°");
}
function captureHandler(event) {
//event.stopImmediatePropagation();
alert("ì¤ê°, 캡ì²");
}
function noneCaptureHandler(event) {
alert("ì¤ê°, ë¹ ìº¡ì², 기본 ê°");
}
function passiveHandler(event) {
// í¨ìë¸ ìì 기 ë´ììë preventDefault ì¬ì© ë¶ê°
event.preventDefault();
alert("ë´ë¶ 1, í¨ìë¸, ì íì´ì§ ì´ë¦¼");
}
function nonePassiveHandler(event) {
event.preventDefault();
//event.stopPropagation();
alert("ë´ë¶ 2, ë¹ í¨ìë¸, 기본 ê°, ì íì´ì§ ì´ë¦¼");
}
ê²°ê³¼
ë°ê¹¥ê³¼ ì¤ê°, ë´ë¶ 컨í ì´ë를 ë°ë³µí´ì í´ë¦í´ ê°ê°ì ìµì ì´ ì´ë»ê² ëìíëì§ íì¸í´ë³´ì¸ì.
options
ê°ì²´ì í¹ì ê°ì ì§ì í기 ì ì, ìµì
ì ì§ì ë²ìë ë¸ë¼ì°ì ì ë¸ë¼ì°ì ë²ì ì ë°ë¼ ë¤ë¥´ë¯ë¡ ë¸ë¼ì°ì ê° í´ë¹ ìµì
ì ì§ìíëì§ ë¨¼ì íì¸íë ê²ì´ ì¢ìµëë¤. ìµì
ì§ìì ìì íê² ê°ì§í기ìì ë°©ë²ì ììë³´ì¸ì.
ë¹ì·í ìì ë¤ìì ì´ë²¤í¸ë¥¼ 모ë ì²ë¦¬í ì ìë ë²ì© ìì 기를 ì ìíë ê²½ì°, ë¶ì°©ë ììì 참조를 ê°ì ¸ìì¼ íë ìí©ì´ ì¢ ì¢ ë°ìí©ëë¤.
addEventListener()
를 ì¬ì©í´ ììì ìì 기를 ë¶ì°©íê² ëë©´ ìì 기 ë´ë¶ì this
ê°ì ëì ìì를 ê°ë¦¬í¤ê² ëë©°, ì´ë ìì ê¸°ê° ë§¤ê°ë³ìë¡ ë°ê² ëë ì´ë²¤í¸ ê°ì²´ì currentTarget
ìì±ê³¼ ê°ìµëë¤.
my_element.addEventListener("click", function (e) {
console.log(this.className); // my_elementì className 기ë¡
console.log(e.currentTarget === this); // `true` 기ë¡
});
ë¤ë§ íì´í í¨ìë ì¤ì¤ë¡ì this
ë§¥ë½ì ê°ì§ì§ ìëë¤ë ì ì 기ìµí´ì¼ í©ëë¤.
my_element.addEventListener("click", (e) => {
console.log(this.className); // ê²½ê³ : `this`ê° `my_element`ê° ìë
console.log(e.currentTarget === this); // `false` 기ë¡
});
HTML ìì¤ ì½ëìì (onclick
í¹ì± ë±ì ì¬ì©í´) ììì ì´ë²¤í¸ ìì 기를 ì§ì íë ê²½ì°, ì´ë²¤í¸ ìì 기 í¹ì± ë´ì JavaScript ì½ëë ê°ìì í¨ìë¡ ê°ì¸ì¸ í, ê°ì¼ í¨ìì this
를 addEventListener()
ì ê°ì ë°©ìì¼ë¡ ë°ì¸ë©íë ê²ì¼ë¡ ìê°í ì ììµëë¤. ì¦, í´ë¹ í¹ì±ì ê°ìì ë±ì¥íë this
ë í¹ì±ì´ ìí ìì를 ê°ë¦¬íµëë¤.
<table id="my_table" onclick="console.log(this.id);">
<!-- `this`ê° í를 ê°ë¦¬í¤ë¯ë¡ 'my_table'ì 기ë¡í¨ -->
...
</table>
ì°¸ê³ ë¡ ì´ë²¤í¸ ìì 기 í¹ì± ììì í¸ì¶í í¨ìì this
ë íì¤ ê·ì¹ì ë°ë¼ê°ë©°, ìë ì½ëë¡ íì¸í ì ììµëë¤.
<script>
function logID() {
console.log(this.id);
}
</script>
<table id="my_table" onclick="logID();">
<!-- í¸ì¶ ì, logIDì `this`ë ì ì ê°ì²´ë¥¼ ê°ë¦¬í¤ê² ë¨ -->
...
</table>
logID()
ë´ì this
ë ì ì ê°ì²´ Window
ì ì°¸ì¡°ê° ë©ëë¤. (ë¨, ì격 모ëììë undefined
)
Function.prototype.bind()
ë©ìë를 ì¬ì©íë©´ 모ë íì í¸ì¶ì this
ë§¥ë½ì ê³ ì í ì ìì¼ë¯ë¡, this
ì ê°ì´ í¸ì¶ ìì¹ì ë°ë¼ ë¬ë¼ì ¸ì ì íí íì
í기 íë¤ ë ë°ìíë 문ì 를 먼ì ë°©ì§í ì ììµëë¤. ë¤ë§, ë°ì¸ëí í¨ì 참조를 ì´ëê°ì ë³´ê´í´ëì¼ ëì¤ì ìì 기를 ì ê±°í ì ììµëë¤.
ë¤ìì bind()
를 ì¬ì©íë ìì 기ì ì¬ì©íì§ ìë ìì 기ì 모ìµì
ëë¤.
const Something = function (element) {
// thisë Something ì¸ì¤í´ì¤
this.name = "Something Good";
this.onclick1 = function (event) {
console.log(this.name); // undefined, thisë elementì
};
this.onclick2 = function (event) {
console.log(this.name); // 'Something Good', thisë Something ì¸ì¤í´ì¤
};
// bindê° onclick2ì this ë§¥ë½ì ê³ ì í¨
this.onclick2 = this.onclick2.bind(this);
element.addEventListener("click", this.onclick1, false);
element.addEventListener("click", this.onclick2, false);
};
const s = new Something(document.body);
ë¤ë¥¸ ë°©ë²ì¼ë¡ë handleEvent()
ë¼ë í¹ë³í ì´ë¦ì ë©ìë를 구íí´ ëª¨ë ì´ë²¤í¸ì ëìíë ê²ì
ëë¤.
const Something = function (element) {
// thisë Something ì¸ì¤í´ì¤
this.name = "Something Good";
this.handleEvent = function (event) {
console.log(this.name); // 'Something Good', thisë Something ì¸ì¤í´ì¤ë¡ ë°ì¸ë© ë¨
switch (event.type) {
case "click":
// ë¤ë¥¸ ì½ë...
break;
case "dblclick":
// ë¤ë¥¸ ì½ë...
break;
}
};
// ìì 기 매ê°ë³ìê° this.handleEventê° ìëë¼ thisì¸ ê²ì 주ì
element.addEventListener("click", this, false);
element.addEventListener("dblclick", this, false);
// ìì 기 ì ê±°ë ê°ë¥
element.removeEventListener("click", this, false);
element.removeEventListener("dblclick", this, false);
};
const s = new Something(document.body);
this
참조를 ì²ë¦¬í ì ìë ë ë¤ë¥¸ ë°©ë²ì¼ë¡ë ê°ì²´ì íëì ì ê·¼í´ì¼ íë ë©ìë를 ìµëª
í¨ìë¡ ê°ì¸ì ì ê³µíë ê²ì´ ììµëë¤.
class SomeClass {
constructor() {
this.name = "Something Good";
}
register() {
const that = this;
window.addEventListener("keydown", function (e) {
that.someMethod(e);
});
}
someMethod(e) {
console.log(this.name);
switch (e.keyCode) {
case 5:
// ë¤ë¥¸ ì½ë...
break;
case 6:
// ë¤ë¥¸ ì½ë...
break;
}
}
}
const myObject = new SomeClass();
myObject.register();
ì´ë²¤í¸ ìì 기 ìíì¼ë¡ ë°ì´í° ì®ê¸°ê¸°
ì´ë²¤í¸ ìì 기ì ë°ì´í°ë¥¼ ì ê³µíë ê²ì ë¬¼ë¡ , ìì 기 ì¤íì´ ëë í 결과를 ê°ì ¸ì¤ë ê² ëí ë§¤ì° ì´ë ¤ìë³´ì¼ ê²ì ëë¤. ì´ë²¤í¸ ìì 기ë ì ì¼í 매ê°ë³ìë¡ ì´ë²¤í¸ ê°ì²´ë§ ë°ì¼ë©°, ë°ííë 모ë ê°ì 무ìë©ëë¤. ê·¸ë¬ë©´ ì´ë»ê² ìì 기ì ë°ì´í°ë¥¼ ì ë¬íê±°ë, ê·¸ ë°ì¼ë¡ ë°ì´í°ë¥¼ ê°ì ¸ì¬ ì ììê¹ì? ëª ê°ì§ ì¢ì ë°©ë²ì ìê°í©ëë¤.
thisë¡ ì´ë²¤í¸ ìì 기ì ë°ì´í° ì ë¬í기ììì ì¸ê¸íë¯, Function.prototype.bind()
를 ì¬ì©íë©´ this
참조 ë³ì를 íµí´ ìì 기ì ê°ì ì ë¬í ì ììµëë¤.
const myButton = document.getElementById("my-button-id");
const someString = "Data";
myButton.addEventListener(
"click",
function () {
console.log(this); // ìì ê°: 'Data'
}.bind(someString),
);
ì´ ë°©ë²ì ìì ê¸°ê° ë°ëë ëìì ì íìê° ìì ë ì í©íë©°, 매ê°ë³ì를 íµí´ ê°ì ì ê³µíë ê²ê³¼ í¬ê² ë¤ë¥´ì§ ìì ë°©ë²ì ì ê³µíë¤ë ì ì´ ì¥ì ì ëë¤.
ë°ê¹¥ ì¤ì½í ìì±ì¼ë¡ ì´ë²¤í¸ ìì 기ì ë°ì´í° ì ë¬í기ë°ê¹¥ ì¤ì½íìì const
, let
ì ì¬ì©í´ ë³ì를 ì ì¸í ê²½ì°, í´ë¹ ì¤ì½í ìì 모ë í¨ìììë í´ë¹ ë³ìì ì ê·¼í ì ììµëë¤(í¨ì 문ììì ë°ê¹¥/ë´ë¶ í¨ìì ëí ì 보를, var
문ììì ë³ì ì¤ì½íì ëí ì 보를 ì½ì´ë³´ì¸ì). ë°ë¼ì, ì´ë²¤í¸ ìì ê¸°ê° ë°ê¹¥ ë°ì´í°ì ì ê·¼í ì ìë ê°ì¥ ì¬ì´ ë°©ë²ì, ê·¸ ë°ì´í°ë¥¼ ì´ë²¤í¸ ìì ê¸°ê° ì ì¸ë ì¤ì½íìì ì ê·¼í ì ìëë¡ íë ê²ì
ëë¤.
const myButton = document.getElementById("my-button-id");
let someString = "Data";
myButton.addEventListener("click", function () {
console.log(someString); // ìì ê°: 'Data'
someString = "Data Again";
});
console.log(someString); // ìì ê°: 'Data' ('Data Again'ì ì¶ë ¥íì§ ìì)
ì°¸ê³ : ë´ë¶ ì¤ì½íìì ë°ê¹¥ ì¤ì½íì const
ì let
ë³ìì ì ê·¼í ìë ìì§ë§, ìì 기 ë´ìì ë³ìì ê°ì ë°ê¾¸ëë¼ë ë°ê¹¥ ì¤ì½íì ê·¸ ë³ê²½ì ì´ ëíë ê²ì¼ë¡ ìê°í´ìë ìë©ëë¤. ì´ë²¤í¸ ìì ê¸°ê° ë°ëíë ìì ìë ì´ë¯¸ ìì ê¸°ê° ìí ì¤ì½íê° ì¤íì ë§ì³¤ì ê²ì´ê¸° ë문ì
ëë¤.
ìì ì 참조íë ë³ìê° ë©ëª¨ë¦¬ì ë¨ììë í, ê°ì²´ë ë©ëª¨ë¦¬ìì ì¬ë¼ì§ì§ ììµëë¤. ì´ ì±ì§ì ëí´, ê°ì²´ë ìì±ì ê°ëë¤ë ì , ê·¸ë¦¬ê³ ì°¸ì¡°ë¡ ì ë¬ëë¤ë ì ì íì©íë©´ ì¤ì½í ìíìì ë°ì´í°ë¥¼ êµííë ì°½êµ¬ë¡ ê°ì²´ë¥¼ ì´ì©í ì ììµëë¤.
ì°¸ê³ : JavaScriptììë í¨ìë ì¬ì¤ ê°ì²´ì ëë¤. ë°ë¼ì í¨ìë ìì±ì ê°ì§ ì ìê³ , ë©ëª¨ë¦¬ì ì ì§ëë ë³ìì í ë¹í ê²½ì° ì¤í íìë ë©ëª¨ë¦¬ìì í´ì ëì§ ììµëë¤.
ê°ì²´ë¥¼ 참조íë ë³ìê° ë©ëª¨ë¦¬ì ì¡´ì¬íë í ê°ì²´ ìì±ì ì¬ì©í´ ë©ëª¨ë¦¬ì ë°ì´í°ë¥¼ ì ì¥í ì ìì¼ë, ì´ë²¤í¸ ìì 기 ë´ë¶ë¡ ë°ì´í°ë¥¼ ì ë¬í ëë ì¬ì©í ì ìê³ , ì´ë²¤í¸ ì²ë¦¬ê¸° ì¤íì´ ëë í ë³íë ë°ì´í°ë¥¼ ê°ì ¸ìì¼ í ëë ì¬ì©í ì ììµëë¤. ìë ì½ë를 ì´í´ë³´ì¸ì.
const myButton = document.getElementById("my-button-id");
const someObject = { aProperty: "Data" };
myButton.addEventListener("click", function () {
console.log(someObject.aProperty); // ìì ê°: 'Data'
someObject.aProperty = "Data Again"; // ê° ë³ê²½
});
window.setInterval(function () {
if (someObject.aProperty === "Data Again") {
console.log("Data Again: True");
someObject.aProperty = "Data"; // ë¤ì ì´ë²¤í¸ ì¤íì 기ë¤ë¦¬ê¸° ìí´ ê° ì´ê¸°í
}
}, 5000);
ì ìì 를 ë³´ë©´, ì´ë²¤í¸ ìì 기ì ì¸í°ë² í¨ìê° ì ìë ì¤ì½íë someObject.aProperty
ê° ë°ë기 ì ì ì¤íì´ ëëê² ì§ë§, someObject
ì ì°¸ì¡°ê° ìì 기ì ì¸í°ë² í¨ì ë©ëª¨ë¦¬ì ê³ì ë¨ìì기 ë문ì, ì쪽 모ëìì ê°ì ë°ì´í°ì ì ê·¼í ì ììµëë¤. ì¦, í ìª½ì´ ë°ì´í°ë¥¼ ë°ê¾¸ë©´ ë°ëí¸ììë ë°ë ë°ì´í°ë¥¼ ë³¼ ì ììµëë¤.
ì°¸ê³ : ê°ì²´ë ë³ìì 참조, ì¤ì ë°ì´í°ê° ì ì¥ë ë©ëª¨ë¦¬ì 주ìë¡ í ë¹ë©ëë¤. ì´ ë§ì ê³§, ê°ì²´ë¥¼ ë´ê³ ìë ë³ì를 ì¬ì©íë©´, ê°ì ê°ì²´ë¥¼ ë´ì ë¤ë¥¸ ë³ììë ìí¥ì ì¤ ì ìë¤ë ë»ì
ëë¤. ë ê°ì ë³ìê° ê°ì ê°ì²´ë¥¼ 참조(e.g. let a = b = {aProperty: 'Yeah'};
)íë©´, í 쪽ì ë³ì ë°ì´í°ë§ ë°ê¿ë ë¤ë¥¸ 쪽 ë°ì´í°ê° ê°ì´ ë°ëëë¤.
ì°¸ê³ : ê°ì²´ë ë³ìì ì°¸ì¡°ë¡ ì ì¥ë기 ë문ì, í¨ììì ê°ì²´ë¥¼ ë°ííë©´ í¨ìê° ì¢ ë£ë ì´íìë ê³ì ì§ì(ë°ì´í°ë¥¼ ìì§ ìëë¡ ë©ëª¨ë¦¬ì ì ì§)ìí¬ ì ììµëë¤.
ë©ëª¨ë¦¬ 문ì const els = document.getElementsByTagName("*");
// ìí© 1
for (let i = 0; i < els.length; i++) {
els[i].addEventListener(
"click",
function (e) {
/*do something*/
},
false,
);
}
// ìí© 2
function processEvent(e) {
/* do something */
}
for (let i = 0; i < els.length; i++) {
els[i].addEventListener("click", processEvent, false);
}
ì ì½ëìì ìí© 1ì ê²½ì°ìë ë°ë³µë¬¸ì 매 ë°ë³µë§ë¤ ìë¡ì´ ìµëª
ì²ë¦¬ê¸° í¨ìê° ìì±ë©ëë¤. ë°ë©´ ìí© 2ììë ì¬ì ì ì ìí í¨ì를 ì´ë²¤í¸ ì²ë¦¬ê¸°ë¡ ì¬ì©íë¯ë¡ ì²ë¦¬ê¸° í¨ì를 íëë§ ì¬ì©íê³ , ë°ë¼ì ë ìì ë©ëª¨ë¦¬ ê³µê°ë§ ì¬ì©í©ëë¤. ëêµ°ë¤ë ìí© 1ììë, ìµëª
í¨ìì ëí 참조를 ì ì§íì§ ìì¼ë¯ë¡ removeEventListener()
를 í¸ì¶í ì ììµëë¤. ë°ë©´ ìí© 2ììë, processEvent
ê° ì²ë¦¬ê¸° í¨ì를 ê°ë¦¬í¤ë¯ë¡ myElement.removeEventListener("click", processEvent, false)
를 í ì ììµëë¤.
ì¬ì¤, ë©ëª¨ë¦¬ ìë¹ì ê´ë ¨íì¬, í¨ì 참조를 ì ì§íì§ ëª»íë ê²ì ì¤ìí 문ì ê° ìëëë¤. ì§ì§ 문ì ë í¨ì 참조를 'ì ì ì¼ë¡' ì ì§íì§ ëª»íë ê²ì ëë¤. ì´ ì ì ë³´ì¬ì£¼ë ìëì ìí© 3ê³¼ ìí© 4ììë í¨ì 참조를 ì ì§í긴 íì§ë§, 매 ë°ë³µë§ë¤ ì¬ì ìë©ëë¤. ìí© 3ììë ë°ë³µí ëë§ë¤ ìµëª í¨ìì ëí 참조를 ì¬í ë¹íê³ , ìí© 4ììë í¨ì ì ì²´ ì ìë ë³íì§ ìì§ë§ ë§¤ë² ë§ì¹ ìë¡ì´ í¨ìì²ë¼ ë°ë³µì ì¼ë¡ ì¬ì ìëë¯ë¡ ë ìí© ëª¨ë ì ì ì´ì§ ììµëë¤. ë°ë¼ì ì½ë를 보기ì ë¤ìì ëì¼í ì´ë²¤í¸ ìì 기ì²ë¼ ë³´ì´ì§ë§, ì¬ì¤ ê° ë°ë³µë§ë¤ ìë¡ì´ ì²ë¦¬ê¸°ë¥¼ 참조íë ìë¡ì´ ì´ë²¤í¸ ìì 기를 ìì±íê³ ìë ê²ì ëë¤.
const els = document.getElementsByTagName("*");
function processEvent(e) {
/* do something */
}
// ìì°ì ìí´ [i] ëì [j]를 ì¬ì©íë ì¤ì를 í ê²ì 주ìíì¸ì. ë°ë³µë¬¸ ë´ìì ì ìí ìì 기를 모ë 첫 ììì ë±ë¡íê³ ììµëë¤.
// ìí© 3
for (let i = 0, j = 0; i < els.length; i++) {
els[j].addEventListener(
"click",
(processEvent = function (e) {
/* do something */
}),
false,
);
}
// ìí© 4
for (let i = 0, j = 0; i < els.length; i++) {
function processEvent(e) {
/* do something */
}
els[j].addEventListener("click", processEvent, false);
}
ëí ìí© 3ê³¼ 4ììë í¨ì ì°¸ì¡°ê° ì ì§ë긴 íì§ë§ ë§¤ë² addEventListener()
ì ì ì¬ì ìëë¯ë¡, removeEventListener("click", processEvent, false)
ë¡ ìì 기를 ì ê±°í ìë ìì¼ë ì¤ì§ ë§ì§ë§ì¼ë¡ ì ìë ìì ê¸°ë§ ì ê±°ë©ëë¤.
ëª
ì¸ì ë°ë¥´ë©´, passive
ìµì
ì 기본 ê°ì íì false
ì
ëë¤. ê·¸ë¬ë ì´ ê¸°ë³¸ ê°ì¼ë¡ ì¸í´ í°ì¹ ì´ë²¤í¸ ë± ì¼ë¶ ì´ë²¤í¸ì ìì ê¸°ê° ì¤í¬ë¡¤ì ì²ë¦¬ ì¤ì¸ ë¸ë¼ì°ì ë©ì¸ ì¤ë ë를 ë¸ë¡í ê°ë¥ì±ì´ ìê¸°ê³ , ë°ë¼ì ì¤í¬ë¡¤ ì±ë¥ì´ í¬ê² ì íë ì ììµëë¤.
ì´ ë¬¸ì 를 ë°©ì§í기 ìí´ ì¼ë¶ ë¸ë¼ì°ì (Chromeê³¼ Firefox ë±)ë 문ì ë 벨 ë
¸ëì¸ Window
, Document
, Document.body
ì touchstart
ì touchmove
ì´ë²¤í¸ì ëí´ì passive
ì 기본 ê°ì true
ë¡ ë°ê¿ ì ì©í©ëë¤. í¨ìë¸ ì´ë²¤í¸ ìì 기ë ì´ë²¤í¸ë¥¼ ì·¨ìí ì ìì¼ë¯ë¡ ì¬ì©ìê° ì¤í¬ë¡¤í ë ë¸ë¼ì°ì ì ë ëë§ì ë°©í´íì§ ììµëë¤.
ì°¸ê³ : ì´ë¤ ë¸ë¼ì°ì /ë²ì ìì ì´ë ê² ëìíëì§ë ìëì ë¸ë¼ì°ì í¸íì± íì ëìììµëë¤.
passive
ìµì
ì ëª
ìì ì¼ë¡ false
를 ì§ì í´ì ì´ ëìì ë§ì ì ììµëë¤.
/* ê¸°ë¥ ê°ì§ */
let passiveIfSupported = false;
try {
window.addEventListener(
"test",
null,
Object.defineProperty({}, "passive", {
get: function () {
passiveIfSupported = { passive: true };
},
}),
);
} catch (err) {}
window.addEventListener(
"scroll",
function (event) {
/* do something */
// event.preventDefault() ì¬ì© ë¶ê°
},
passiveIfSupported,
);
addEventListener()
ê° options
매ê°ë³ì를 ì§ìíì§ ìë 구í ë¸ë¼ì°ì ìì options
ê°ì²´ë¥¼ ì§ì íë©´ useCapture
매ê°ë³ì를 ì¬ì©í ì ìì¼ë¯ë¡, ìì ê°ì´ ê¸°ë¥ ê°ì§ë¥¼ ê±°ì³ì¼ í©ëë¤.
scroll
ì´ë²¤í¸ì ëí´ìë passive
ìµì
ì ê³ ë ¤íì§ ììë ë©ëë¤. ì´ì°¨í¼ ì·¨ìí ì ìë ì´ë²¤í¸ë¼ì, ìì ê¸°ê° íì´ì§ ë ëë§ì ë§ì ìë ì기 ë문ì
ëë¤.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4