๐ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ ๊ฑฐ & ์ด๋ฒคํธ ํ๋ฒ๋ง ์คํ ๋ฐฉ๋ฒ
์ด๋ฒคํธ ์ ๊ฑฐํ๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ์์ addEventListener()๋ฅผ ์ฌ์ฉํด ์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํ ๊ฒฝ์ฐ, ๋ฐ๋๋ก ์ด๋ฅผ ์ ๊ฑฐํ ์ ์์ผ๋ฉฐ ์ด๋ removeEventListener() ๋ฅผ ์ฌ์ฉํ๋ค.
removeEventListener()ํจ์๋ EventTarget์ ๋ฑ๋ก๋์๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ ๊ฑฐํ๋๋ฐ, ์ด ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ ์ด๋ฒคํธ ์ข
๋ฅ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ํจ์ ์์ฒด์ ์กฐํฉ์ผ๋ก ์๋ณ๋์ด ์ ๊ฑฐ๋๋ฉฐ, ์ ๊ณต๋์๋ ๋ค์ํ ์ต์
์ ์ผ์นํ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ง ์ ๊ฑฐ๊ฐ ๊ฐ๋ฅํ๋ค.
element.removeEventListener('์ด๋ฒคํธํ์
', ์ด๋ฒคํธ ์ฝ๋ฐฑ ํจ์)
๋ค๋ง ์ฌ๊ธฐ์ ์ ์ํ ์ ์ด ์๋๋ฐ, ๋ณดํต ์ฌ๋ฌ๋ถ์ ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํ ๋ addEventListener์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ต๋ช ํจ์๋ก ํด์ ์ฝ๋ฉ์ ํ ๊ฒ์ด๋ค. ์๋ํ๋ฉด ์ต๋ช ํจ์๋ก ํ๋๊ฒ์ด ๊ฐ๋ ์๋ ์ข๊ณ ์ฝ๋๋ ๋ณด๊ธฐ ์ข์์ง๊ธฐ ๋๋ฌธ์ด๋ค.
element.removeEventListener('์ด๋ฒคํธํ์
', function() {
//... ์ด๋ฒคํธ ์ฝ๋ฐฑ ์ฝ๋
})
๊ทธ๋ฌ๋ removeEventListener() ํจ์๋ก ์ด๋ฒคํธ๋ฅผ ์ ๊ฑฐ ํ ๋ ๋ช๊ฐ์ง ์์๊ฐ ํ์ํ๋ฐ, ์ ๊ฑฐํ ์๋ฆฌ๋จผํธ(element) ์์์ click์ด๋ keypress ๋ฑ์ ์ด๋ฒคํธ ํ์
๊ทธ๋ฆฌ๊ณ ์ ๊ฑฐํ ์ด๋ฒคํธ callback ํจ์๋ฅผ ํ์๋ก ํ๋ค.
๋ง์ผ ์ต๋ช ํจ์๋ก addEventListener๋ฅผ ๋ฑ๋กํ๋ค๋ฉด, ์ด ์ต๋ช ํจ์์ ์ ๊ทผํ ๋ฐฉ๋ฒ์ด ์์ด์ ์ด๋ฒคํธ ์ ๊ฑฐ๋ฅผ ๋ชปํ๊ฒ ๋๊ฒ ๋๋ค. ๋ฐ๋ผ์ ๋ฐ๋ก ํจ์๋ฅผ ์ ์ํด์ ์ด๋ฒคํธ ๋ฐ์ธ๋ฉ์ ํ๋ ์์ผ๋ก ํด์ผ, ๋์ค์ ์ด๋ฒคํธ ์ ๊ฑฐ๋ ๊ฐ๋ฅํ๋ค.
// ์ด๋ฒคํธ ์ฝ๋ฐฑํจ์๋ฅผ ๋ฐ๋ก ์ ์
function onClickFunction(){
alert('Hello World !')
}
// ์ด๋ฒคํธ ๋ฑ๋ก
eventTarget.addEventListener('click', onClickFunction)
// ์ด๋ฒคํธ ์ ๊ฑฐ
// eventTarget์ ๊ฑธ๋ ค์๋ click์ด๋ฒคํธ์ ์ฝ๋ฐฑํจ์ onClickFunction์ ์ ๊ฑฐ
eventTarget.removeEventListener('click', onClickFunction)
arguments.callee ์ฌ์ฉํ๊ธฐ
๋ง์ผ ์ผ์ผํ ์ต๋ช
์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฐ์ผ๋ก ์ผ์ผํ ๋นผ๋ด์ ์ ์ํ๊ธฐ์ ์์ด ๋ง๋ค๋ฉด, ์ต๋ช
์ฝ๋ฐฑํจ์๋ฅผ ์จ๋ ์ด๋ฒคํธ ์ ๊ฑฐ๊ฐ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ด ํ๊ฐ์ง ์กด์ฌํ๋ค. arguments.callee ๋ ํ์ฌ ์คํ ์ค์ธ ํจ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ ์์ฑ์ธ๋ฐ, ์ต๋ช
ํจ์์์๋ ํจ์๋ฅผ ์ฐธ์กฐ๋ฅผ ํ ์ ์๋ค. ์ด๋ฅผ ์ด์ฉํด์ ๋ฑ๋ก๋ ์ด๋ฒคํธ์ ์ฝ๋ฐฑ ํจ์ ๋ธ๋ก ๋ด์ ๊ฐ๋จํ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ด๋ฒคํธ๋ฅผ ์ ๊ฑฐ ํ ์ ์๋ค. ์ด๋ ์ด๋ฒคํธ ํจ์์ ์ฝ๋ฐฑ ํจ์๋ ๋ฐ๋์ function ํค์๋๋ก ์์ฑํด์ผ ๋๋ค. ํ์ดํ ํจ์๋ event ๊ฐ์ฒด์ ๋๋ถ์ด arguments์ ๋ฐ์ธ๋ฉ์ด ์ผ์ด๋์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ฒคํธ ํจ์์๋ ์ฌ์ฉ์ ๊ถ๊ณ ํ์ง ์๋๋ค.
// ์ด๋ฒคํธ ๋ฑ๋ก
eventTarget.addEventListener('click', function(){
// .. ์ด๋ฒคํธ ์ต๋ช
์ฝ๋ฐฑํจ์ ์คํ
// ์ด๋ฒคํธ ์ ๊ฑฐ
eventTarget.removeEventListener('click', arguments.callee)
})
์ ์ด์ฟผ๋ฆฌ๋ก ํ๋ ๋ฐฉ๋ฒ์ ์๋ ํฌ์คํ ์ผ๋ก ๋ฐ๋ก ์ ๋ฆฌํ๋ค.
์ด๋ฒคํธ ๋จ ํ๋ฒ๋ง ์คํ๋๋๋ก ํ๊ธฐ
๋ง์ผ ๊ทธ๋ฅ ํ๋ฒ๋ง ์ด๋ฒคํธ ๋ฐ์์ ์คํํ๊ณ ์ถ๋ค๋ฉด, ๋ฑ๋กํ๊ณ ์ญ์ ํ๋ ์๋ณด๋ค๋ ์์ ์ฒ์๋ถํฐ ํ๋ฒ๋ง ์คํํ๋๋ก ์ต์
์ ์ฃผ๋ฉด ๋๋ค. addEventListener() ๋ฉ์๋์ 3๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก { once : true } ์ธ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ฉด ๊ฐ๋จํ ์ ์ฉ์ด ๋๋ค.
eventTarget.addEventListener('click', function() {
alert('์๋
ํ์ธ์!!');
}, { once : true });