์ด๋ฒคํธ(event)๋ ํด๋ฆญ ํ์ '๋', ์คํฌ๋กค์ ํ์ '๋', ํ๋์ ๋ด์ฉ์ ๋ฐ๊พธ์์ '๋' ๊ฐ์ด ์ด๋ค ์ฌ๊ฑด ๋๋ ํ์๋ฅผ ์๋ฏธํฉ๋๋ค.
์ด๋ฒคํธ๋ DOM๊ณผ ๋ฐ์ฒฉํ ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
ํ๋ก๊ทธ๋จ์๋ ์ด๋ฐ ์ฌ์ฉ์์ ํ์์ ์ฌ๊ฑด์ ์์ธกํ์ฌ ๋ฏธ๋ฆฌ ์ฌ์ฉํ ์ ์๋ ์ด๋ฒคํธ๊ฐ ์ค๋น๋์ด ์์ต๋๋ค.
๐ค์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ฅผ ๊ฐ์งํ๊ณ ๋์ํ๋ ์ฒ๋ฆฌ ํธ์ถํด ์ฃผ์ด์ผ ํ๋๋ฐ...? ๐ค
๋ฐ๋ก, ๋ธ๋ผ์ฐ์ ์์ ์ด๋ฒคํธ๋ฅผ ์๋์ผ๋ก ๊ฐ์งํ๊ณ ๋ฐ์ ์์ ํต์ง๋ฅผ ํด ์ค๋๋ค!
์ด๋ฌํ ๊ณผ์ ์ ํตํด ์ฌ์ฉ์์ ์นํ์ด์ง๋ ์ํธ ์์ฉ(interaction)์ด ๊ฐ๋ฅํ๊ฒ ๋ฉ๋๋ค.
๐ค๊ทธ๋ผ ์ด๋ฒคํธ์ ํญ์ ๊ฐ์ด ๋ถ์ด๋ค๋๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ ๋ฌด์์ผ๊น์?๐ค
์ด๋ฒคํธ(event)๊ฐ ๋ฐ์ํ์ ๋ ๊ทธ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ ์คํ ํจ์๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. ์ฆ, ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ๋์ํ๋ ์ฝ๋๋ฅผ ์๋ฏธํฉ๋๋ค.
์ง์ ๋ ํ์ ์ ์ด๋ฒคํธ๊ฐ ํน์ ์์์์ ๋ฐ์ํ๋ฉด, ์น ๋ธ๋ผ์ฐ์ ๋ ๊ทธ ์์์ ๋ฑ๋ก๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์คํ์ํต๋๋ค.
์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ์ฐ๊ฒฐ๋ ํน์ DOM์์ ์ง์ ๋ ํ์ ์ ์ด๋ฒคํธ ๋ฐ์
โ ์น ๋ธ๋ผ์ฐ์ ๋ ์๋์ผ๋ก ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ์ฐ๊ฒฐ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ์คํ ํ๋ก์ธ์ค
์ด๋ฒคํธ ๋ฆฌ์ค๋๋ ํด๋น ๊ฐ์ฒด๋ ์์์ ๋ฑ๋ก๋์ด์ผ๋ง ํธ์ถ์ด ๊ฐ๋ฅํฉ๋๋ค.
inline ๋ฐฉ๋ฒ
<input type="button" onclick="alert('Hello world');" value="button" />
property๋ก ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ
์ด๋ฒคํธ ๋์์ ํด๋นํ๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ก ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํ๋ ๋ฐฉ์์ ๋๋ค.
<input type="button" id="target" value="button" />
var dom = document.getElementById('target');
dom.onclick = function(){
alert('Hello world');
}
addEventListener()
์ ๋ฌํ๋ ๋ฐฉ๋ฒ
๊ฐ์ฅ ๊ถ์ฅ๋๋ ๋ฐฉ์์ ๋๋ค! ์ฌ๋ฌ๊ฐ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํ ์ ์๊ธฐ ๋๋ฌธ์ธ๋ฐ์. ํ์ง๋ง ํด๋น ๋ฐฉ์์ internet explore8 ์ดํ์์๋ ํธํ๋์ง ์์ต๋๋ค.
dom.addEventListener('click', function(event){
alert('Hello world, '+ event);
});
dom.addEventListener('click', function(event){
alert('Hello world, '+ event);
});
๐ค์ด ์ฝ๋์์ ๋ณด์ด๋ event
๋ ๋ฌด์์ ์๋ฏธํ ๊น์?๐ค
๋ฐ๋ก, ์ด๋ฒคํธ ๊ฐ์ฒด(event object) ์ ๋๋ค.
์ด๋ฒคํธ ๊ฐ์ฒด(event object)๋ ํน์ ํ์ ์ ์ด๋ฒคํธ์ ๊ด๋ จ ์๋ ๊ฐ์ฒด์ ๋๋ค. ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ํธ์ถ๋ ๋ ์ ๋ฌ๋๋ ์ธ์๊ฐ ๋ฐ๋ก ์ด๋ฒคํธ ๊ฐ์ฒด ์ ๋๋ค.
๋ชจ๋ ์ด๋ฒคํธ ๊ฐ์ฒด๋ ํด๋น ์ด๋ฒคํธ์ ๋ํย ์์ธ ์ ๋ณด์ ์ด๋ฒคํธ๋ฅผ ์กฐ์ํ๋ ๋ฉ์๋๋ค์ด ๋ค์ด์์ต๋๋ค.
๋ํ, ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๋๋ฐ ...
type
ํ๋กํผํฐtarget
ํ๋กํผํฐ๋ํ์ ์ผ๋ก ์ด ๋ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๋๋ค.
var btn = document.getElementById("btn"); // ์์ด๋๊ฐ "btn"์ธ ์์๋ฅผ ์ ํํจ.
btn.addEventListener("click", clickBtn); // ์ ํํ ์์์ click ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋กํจ.
function clickBtn(event) {
document.getElementById("text").innerHTML =
"์ด ์ด๋ฒคํธ์ ํ์
์ " + event.type +
"์ด๋ฒคํธ์ ๋์์ " + event.target + "์
๋๋ค.";
}
<div id='dom' onclick="alert('Hello world');"></div>
document.getElementById('dom').addEventListener('click', event => {alert('Hi')});
document.getElementById('dom').addEventListener('click', event => {alert('Hello')});
์ด๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ๋ธ๋ผ์ฐ์ ๋
addEventListener()
๋ฉ์๋ ์ฌ์ฉํ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฑ๋กํ ์์๋๋ก ํธ์ถ์ด๋ฒคํธ๋ ํฌ๊ฒ 3๊ฐ์ง๋ก ๊ตฌ๋ถ ๊ฐ๋ฅํฉ๋๋ค.
์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์๋ถํฐ ์์ํด DOM ํธ๋ฆฌ๋ฅผ ๋ฐ๋ผ ์์ชฝ์ผ๋ก ์ฌ๋ผ๊ฐ๋ฉฐ๐ ์ ํ๋๋ ๋ฐฉ์์ ๋๋ค.
//๊ฐ ์์๋ง๋ค ๋ฒ๋ธ๋ง ๋ฐฉ์์ผ๋ก click ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฑ๋ก
document.getElementById("divBox").addEventListener("click", event => {
document.getElementById("text").innerHTML += "div ์์๋ฅผ click ํ์
จ๋ค์!<br>";
});
document.getElementById("paraBox").addEventListener("click", event => {
document.getElementById("text").innerHTML += "p ์์๋ฅผ click ํ์
จ๋ค์!<br>";
});
document.getElementById("spanBox").addEventListener("click", event => {
document.getElementById("text").innerHTML += "span ์์๋ฅผ click ํ์
จ๋ค์!<br>";
});
์ฅ์ ๐
์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์๊น์ง DOM ํธ๋ฆฌ์ ์ต์์๋ถํฐ ์๋์ชฝ์ผ๋ก ๋ด๋ ค๊ฐ๋ฉฐ๐ ์ ํ๋๋ ๋ฐฉ์์ ๋๋ค.
document.getElementById("divBox").addEventListener("click", clickDivEvent, true);
document.getElementById("paraBox").addEventListener("click", clickParaEvent, true);
document.getElementById("spanBox").addEventListener("click", clickSpanEvent, true);
์บก์ณ๋ง ์ ํ ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ ์ํด์ addEventListener()
๋ฉ์๋์ ์ธ๋ฒ์งธ ์ธ์์ true
๊ฐ์ ์ ๋ฌํฉ๋๋ค.
target.addEventListener(type, listener[, useCapture]);
ํน์ ๋ฉ์๋๋ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฒคํธ์ ์ ํ๋ฅผ ์ทจ์ํ ์ ์์ต๋๋ค.
stopPropagation()
๋ฉ์๋ : ํ๊ทธ ํด๋ฆญ ์ ๋ถ๋ชจ์๊ฒ ์ด๋ฒคํธ๊ฐ ์ ๋ฌ(๋ฒ๋ธ๋ง)๋์ง ์๋๋ก ํฉ๋๋ค.cancelBubble
ํ๋กํผํฐfunction clickLink(event) {
event.preventDefault(); // ๋งํฌ์ ๊ธฐ๋ณธ ๋์์ ์ทจ์ํจ.
document.getElementById("text").innerHTML += "๋งํฌ์ ๊ธฐ๋ณธ ๋์์ ๋ง์์ด์!<br>";
event.stopPropagation(); // ์ด๋ฒคํธ์ ์ ํ๋ฅผ ์ทจ์ํจ.
document.getElementById("text").innerHTML += "์ด๋ฒคํธ์ ์ ํ๋ฅผ ๋ง์์ด์!<br>";
}
ํน์ ์ด๋ฒคํธ( ex : <a>
)๋ ๋ฏธ๋ฆฌ ์ง์ ๋ ๊ธฐ๋ณธ ๋์์ ๊ฐ์ง๊ณ ์๊ณ ์ด๋ฅผ ์คํํ์ง๋ง ํน์ ๋ฉ์๋๋ ํ๋กํผํฐ๋ฅผ ์ด์ฉํด ๊ธฐ๋ณธ ๋์์ ์คํ์ ์ทจ์ํ ์ ์์ต๋๋ค.
preventDefalut()
๋ฉ์๋ : ๊ธฐ๋ณธ ๋์์ ์ทจ์ํฉ๋๋ค.returnValue
ํ๋กํผํฐdocument.getElementById("linkBox").addEventListener("click", event => {
event.preventDefault(); // ๋งํฌ์ ๊ธฐ๋ณธ ๋์์ ์ทจ์ํจ.
document.getElementById("text").innerHTML += "๋งํฌ์ ๊ธฐ๋ณธ ๋์์ ๋ง์์ด์!<br>";
document.getElementById("text").innerHTML += "a ์์๋ฅผ click ํ์
จ๋ค์!<br>";
});
https://codedragon.tistory.com/5743
https://blog.daum.net/tstory/215
https://www.zerocho.com/category/JavaScript/post/57432d2aa48729787807c3fc