whatisthis?
javaScript. (20) Event Listener / Callback ๋ณธ๋ฌธ
๐ Event Listener
- ํด๋น ์ด๋ฒคํธ์ ๋ํด ๋๊ธฐ์ค์ธ ๊ฒ. (์์ Listening ์ค)
- ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์๋ ๋ฑ๋กํ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ์คํ๋จ.
window.onload = function () {
alert('I\'m loaded');
};
- ๋ํ์ ์ธ ์ด๋ฒคํธ๋ฆฌ์ค๋ ์ฝ๋์.
- window๊ฐ load ๋ ๋ function ๋ถ๋ถ์ด ์คํ๋๋ ๊ฒ.
์ด๋ฒคํธ๋ฆฌ์ค๋๋ ํญ์ on + '์ด๋ฒคํธ๋ช '์ผ๋ก ๋ช ๋ช ๋๋ค.
์> onclick
** ์์ฃผ ์ฐ์ด๋ ์ด๋ฒคํธ ๋ชฉ๋ก
onchange | ๊ฐ์ฒด ๋ด์ฉ์ด ๋ฐ๋๊ณ / ํฌ์ปค์ค๋ฅผ ์์ ๋ |
onclick | ๊ฐ์ฒด๋ฅผ ํด๋ฆญํ ๋ |
ondblclick | ๊ฐ์ฒด๋ฅผ ๋๋ธํด๋ฆญํ ๋ |
onerror | ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋ |
onfocus | ๊ฐ์ฒด์ ํฌ์ปค์ค๋์์ ๋ |
onblur | ๊ฐ์ฒด๊ฐ ํฌ์ปค์ค๋ฅผ ์์ ๋ |
onkeydown | ํค๋ฅผ ๋๋ ์ ๋ |
onkeypress | ํค๋ฅผ ๋๋ฅด๊ณ ์์ ๋ |
onkeyup | ํค๋ฅผ ๋๋ ๋ค ๋์ ๋ |
onload | ๋ฌธ์๋ ๊ฐ์ฒด๊ฐ ๋ก๋ฉ๋์์ ๋ |
onmouseover | ๋ง์ฐ์ค๊ฐ ๊ฐ์ฒด ์์ ์ฌ๋ผ์์ ๋ |
onmousedown | ๋ง์ฐ์ค๊ฐ ๊ฐ์ฒด ๋ฐ๊นฅ์ผ๋ก ๋๊ฐ์ ๋ |
onreset | reset ๋ฒํผ์ ๋๋ ์ ๋ |
onresize | ๊ฐ์ฒด์ ํฌ๊ธฐ๊ฐ ๋ฐ๋์์ ๋ |
onscroll | ์คํฌ๋กค๋ฐ๋ฅผ ์กฐ์ํ ๋ |
onsubmit | ํผ์ด ์ ์ก๋ ๋ |
๊ทธ ์ธ์ ๋ค์ํ ์ด๋ฒคํธ์ ์ข ๋ฅ๋ฅผ ์ ๊ธ๐บ ์ ํฌ์คํ ํด๋์๋ค.
window ๋ง๊ณ ๋ ์ฌ๋ฌ ํ๊ทธ์ ๊ฐ๊ฐ ์ด๋ฒคํธ๋ฅผ ์ค์ ํ ์ ์๋ค.
(์- html์ <form>ํ๊ทธ๋ / <button>ํ๊ทธ / <a>ํ๊ทธ ๋ฑ ... )
์ด๋ฒคํธ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์๋
1. on(Event) ์ด์ฉ >> ๋์ ์ฐ์ฐ์๋ก function์ ๋์ ํ๋ค.
document.getElementById('clickMe').onclick = function () {
console.log('clicked!');
};
2. addEventListener(Event, function)
- ์ฌ๋ฌ ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํ ์ ์๊ณ , ํน์ ์ด๋ฒคํธ๋ฅผ ์ ๊ฑฐํ ์๋ ์์ด์
on์ผ๋ก ์ด๋ฒคํธ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋กํ๋ ๊ฒ ๋ณด๋ค ์ฅ์ ์ด ๋ง๋ค.
function onClick() {
console.log('clicked!');
}
function onClick2() {
console.log('๋๋ค๋ฅธ ์ด๋ฒคํธ');
}
document.getElementById('clickMe').addEventListener('click', onClick);
document.getElementById('clickMe').addEventListener('click', onClick2); // 2๊ฐ ์ฐ๊ฒฐ ๊ฐ๋ฅ
document.getElementById('clickMe').removeEventListenr('click', onClick2); // ํ๋ ์ ๊ฑฐ
- click ์์น๋ ํด๋น ์ด๋ฒคํธ๋ช (click, submit ๋ฑ)์ ์ ๋ ฅํ๋ฉด ๋๋ค.
๐ Callback
- ์ ๋ ์ฝ๋์์ function ๋ถ๋ถ์ ๋ถ๋ฅด๋ ๊ฒ์ ์ฝ๋ฐฑ(callback)์ด๋ผ๊ณ ํ๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ํจ์๋ ()๋ก ํธ์ถํ๋๋ฐ, ์ด์๋ ๋ค๋ฅด๋ค. >> ๋ค์ ใ ก ์๋ ค์ฃผ๋ callback์ด๋ค.
- ๊ผญ ์ด๋ฒคํธ๊ฐ ์๋๋๋ผ๋, ์ฝ๋ฐฑ์ ํ์ฉํ ์ ์๋ค.
var cbExample = function(number, cb) {
setTimeout(function() { // setTimeout ๋ฉ์๋ ใ
ก โ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํด
var sum = 0;
for (var i = number; i > 0; i--) { // for๋ฌธ ใ
ก number๋ก ๋ฐ์ ๊ฐ ์ด์ฉ
sum += i;
}
cb(sum); // sum์ cbExampleํจ์์์ cb๋ฅผ ๋ฐ๋ ๊ฒ. (cb = ์ฝ๋ฐฑ์ ๋ฐ๋ ๋ถ๋ถ)
}, 0);
};
cbExample(10, function(result) { // cb๋ก ํจ์๋ฅผ ๋ฃ๋๋ค.
console.log(result); // 1๋ถํฐ 10๊น์ง์ ํฉ = 55
}); // 55
console.log('first');
- ์ฝ๋ฐฑ์ ๋ฐ๋ ๋ถ๋ถ์ธ cb์์ ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๋๋ค.
>> ๊ทธ ํจ์๊ฐ ์ฝ๋ฐฑํจ์๋ก ๋ฑ๋ก๋์ด, ๊ณ์ฐ์ด ๋๋ ํ์ ์คํ๋๋ค.
- ์ฝ๋ฐฑ ๋ฑ๋ก๋ง ํด๋์ผ๋ฉด ์์์ ๊ณ์ฐ์ด ๋๋ ํ ์๋ ค์ค
first๊ฐ 55๋ณด๋ค ์๋์ ์์ง๋ง, first๋ฅผ ๋จผ์ ์ฝ์์ ๋ก๊ทธํ๋ค.
setTimeout์ ์ฌ์ฉํ๋ฉด ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ค. >> ์ฝ๋ฐฑ
- delay๋ฅผ ์ค์ ์ํด๋ (์ฆ, 0์ด๋ก ํด๋) ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ค.
๐ก setTimeout()
setTimeout(function[, delay]);
- ํ์ด๋จธ ์คํ ํ ์คํํจ.
- delay ๋ค์ arg1, arg2, ... ๋ฅผ ์ ์ด ์ถ๊ฐ๋ก ๋งค๊ฐ๋ณ์๋ฅผ ํจ์์ ์ ๋ฌํ ์ ์๋ค.
Syncronous (๋๊ธฐ์) | ์์ฒญ์ ๋ณด๋ธ ํ ํด๋น ์์ฒญ์ ์๋ต์ ๋ฐ์์ผ ๋ค์ ๋์์ ์คํํ๋ ๋ฐฉ์ |
Asynchronous (๋น๋๊ธฐ) | ์์ฒญ์ ๋ณด๋ธ ํ ์๋ต๊ณผ ๊ด๊ณ์์ด ๋ค์ ๋์์ ์คํํ๋ ๋ฐฉ์ |
์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๊ธฐ์ ์ธ ์ธ์ด์ด๋ฏ๋ก, ์๋ต์ ๋ฐ์์ผ ๋ค์ ๋์์ด ์คํ๋๋ค.
>> ๊ทธ๋ฌ๋, ๋น๋๊ธฐ์ ์ฝ๋ฐฑ ์ ์ด์ฉํด์ ๋น๋๊ธฐ์์ผ๋ก ์กฐ์ํ ์ ์๋ค.
๊ทธ ์ธ์๋ ์ฝ๋ฐฑ์ ๋ค์ํ ๊ณณ์์ ์ฌ์ฉ๋๋ค.
์> forEach๋ map๋ฑ
๋ง์ฝ, cbExampleํจ์๊ฐ 10์ด๊ฐ ์์๋๋ ์ผ์ด๋ผ๋ฉด,
์ด ํจ์๊ฐ ๋๋๊ณ ๋ค์ ์ฝ๋๊ฐ ์คํ๋ ๋ ๊น์ง 10์ด๋ ๊ธฐ๋ค๋ ค์ผํ๋ค.
>> ์ฝ๋ฐฑ์ ๋ฑ๋กํด๋๊ณ , ๋ฐ๋ก ๋ค์์ฝ๋๋ก ๋์ด๊ฐ์ - ์ผ์ด ์๋ฃ๋๋ฉด ์๋ ค์ฃผ๋๋ก ๋ง๋ค๋ฉด ํด๊ฒฐ๋จ.
์ฆ, ์ฝ๋ฐฑ์
์ธ์ ๋๋ ์ง ๋ชจ๋ฅด๋ ๋์์ ๋ํด ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌ๋ฐ์ ๋ ์ ์ฉํ๋ค.
>> ๊ณ์ ๊ธฐ๋ค๋ฆด ํ์๊ฐ ์์ด์ง๋๊น.
๐ก ์ด๋ฒคํธ ๋ฒ๋ธ๋ง
- DOM์ ์ฐ๊ฒฐํ ๊ฐ์ฒด๋ ๋ฒ๋ธ๋ง์ด ์ผ์ด๋๋ค.
** ๋ฒ๋ธ๋ง : ์์ ์ ์ด๋ฒคํธ๊ฐ ๋ถ๋ชจ์๋ ์ ๋ฌ๋จ.
<div id="first"><div id="second"><div id="third"></div></div></div>
์์ ๊ฐ์ ๊ตฌ์กฐ๊ฐ ์์๋,
div #third๋ฅผ ํด๋ฆญํ๋ฉด ใ ก second, first ์์ผ๋ก ๊ฐ์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค.
๋ถ๋ชจํ๊ทธ(์ง๊ณ) | #second |
์กฐ์ํ๊ทธ(์์) | #first |
๐ก ์ด๋ฒคํธ ๊ฐ์ฒด
- DOM์ ๋ํ ์ด๋ฒคํธ์ ์ฐ๊ฒฐํ ํจ์๋ ์ด๋ฒคํธ ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ฉ ๊ฐ๋ฅ.
- ์ด๋ฒคํธ ๊ฐ์ฒด๋ Event์ ๋ํ ์ ๋ณด์ ์กฐ์ ๋ฉ์๋๋ค์ด ๋ค์ด์๋ค.
/// ๋ฐฉ๋ฒ 1 - on ์ด์ฉ
document.getElementById('btn').onclick = function (event) {
event.preventDefault();
event.stopPropagation();
event.stopImmediatePropagation();
}
/// ๋ฐฉ๋ฒ 2 - addEventListener ์ด์ฉ
document.getElementById('btn').addEventListener('click', function(event) {
event.preventDefault();
event.stopPropagation();
event.stopImmediatePropagation();
});
1) event.preventDefault()
- ํ๊ทธ์ ๊ธฐ๋ณธ ๋์์ ๋ง์์ฃผ๋ ์ญํ
์> a ํ๊ทธ - ๋งํฌ ์ด๋ / form ํ๊ทธ - ํผ ๋ด์ฉ ์ ์ก
2) event.stopPropagation()
- ๋ถ๋ชจ์๊ฒ ์ด๋ฒคํธ๊ฐ ์ ๋ฌ๋์ง ์๋๋ก ํจ ( = ๋ฒ๋ธ๋ง ํ์ ๋ฐฉ์ง )
if> ์ฌ๋ฌ๊ฐ์ ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ๋์์ ์ฐ๊ฒฐํ ๊ฒฝ์ฐ
stopPropagation์ผ๋ก ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ๋ง์๋ (๋ถ๋ชจ์๊ฒ ๋ฒ๋ธ๋งx)
๋ค๋ฅธ ํด๋ฆญ ์ด๋ฒคํธ๋ ์คํ๋๋ค. (๋ถ๋ชจ ๋ง๊ณ ๋ค๋ฅธ ํด๋ฆญ ์ด๋ฒคํธ๋ ํด๋ฆญ๋จ)
>> ์ด๋, stopImmediatePropagation ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด,
๋ถ๋ชจ์๊ฒ๋ ์ด๋ค ์ด๋ฒคํธ๋ ๋ฒ๋ธ๋ง๋์ง ์์ผ๋ฉด์ ๋ค๋ฅธ ํด๋ฆญ ์ด๋ฒคํธ๋ ์คํ๋์ง ์๋๋ค.
3) event.stopImmediatePropagation()
- ๋ถ๋ชจ์๊ฒ ๋ฒ๋ธ๋ง๋์ง ์๊ณ / ๋ค๋ฅธ ํด๋น ์ด๋ฒคํธ๋ ๋ง์์ค
>> but. ์ข ๋ฅ๊ฐ ๋ค๋ฅธ ์ด๋ฒคํธ๋ ๋ง์ง ๋ชปํ๋ค. (์ - click์ด๋ฒคํธ๋ผ๋ฉด submit์ ๋ง์ง ๋ชปํจ)
** ๊ทธ ์ธ event ๊ฐ์ฒด์ ์ ๋ณด๋ค
event.target | ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ํ๊ทธ(์ ์ ๋ณด) |
event.pageX | ํด๋ฆญํ ์ขํ |
event.pageY | |
event.key | ์ด๋ค ํค๋ฅผ ๋๋ ๋์ง |
REFERENCE
์ด ํฌ์คํ ์ zerocho๋์ javascript ๊ฐ์๋ฅผ ๋ณด๊ณ ์์ฑํ ๊ธ์ ๋๋ค.
๊ณต๋ถ+๊ธฐ๋ก ์ฉ์ผ๋ก ์์ฑํ ๊ฒ์ด๋ฉฐ, ์์ธํ ๊ฒ์ ์ ํฌ์คํ ์ ์ฐธ๊ณ ํ์ธ์!
'WEB STUDY > JAVASCRIPT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
javaScript. (21) ํจ์์ ๋ฉ์๋์ argument (0) | 2022.01.30 |
---|---|
javaScript. ๋น๋๊ธฐ ์ฒ๋ฆฌ์ Callback ํจ์ (0) | 2022.01.30 |
javaScript. ์ด๋ฒคํธ(on__)์ ์ข ๋ฅ (0) | 2022.01.28 |
javaScript. (19) JSON (stringify / parse) (0) | 2022.01.28 |
javaScript. (18) ์คํ ์ปจํ ์คํธ (0) | 2022.01.28 |