[jQuery] ์ด๋ฒคํธ ์ฐ๊ฒฐ ๋ฐ ์ฒ๋ฆฌ on(), off(), one()
1. ์ด๋ฒคํธ์ ์ฐ๊ฒฐ(event binding)
ํน์ ์์์์ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด์๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ(event handler)ํจ์๋ฅผ ์์ฑํด์ผ ํ๋ค.
์ด๋ ๊ฒ ์์ฑ๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ํน์ ์์์ ์ฐ๊ฒฐํ๋ ๊ฒ์ ์ด๋ฒคํธ๋ฐ์ธ๋ฉ(event binding)์ด๋ผ๊ณ ํ๋ค.
jQuery๋ ์ด๋ฒคํธ๋ฐ์ธ๋ฉ์ ์ํ ๋ค์ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
[์์ ] :: id๊ฐ "btn"์ธ ์์์ ํด๋ฆญ(click) ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฐ์ธ๋ฉํ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ด๋ค.
$('#btn').click(function(event) { /* ์คํํ๊ณ ์ ํ๋ jQuery ์ฝ๋ */ });
$('#btn').bind('click', function(event) { /* ์คํํ๊ณ ์ ํ๋ jQuery ์ฝ๋ */ });
$('#btn').on('click', function(event) { /* ์คํํ๊ณ ์ ํ๋ jQuery ์ฝ๋ */ });
$('body').on({ 'click' : function(event) { /* ์คํํ๊ณ ์ ํ๋ jQuery ์ฝ๋ */ }}, '#btn');
$('body').on('click', '#btn', function(event) { /* ์คํํ๊ณ ์ ํ๋ jQuery ์ฝ๋ */ });
jQuery 1.7๋ถํฐ๋
.bind()
๋.click()
๋ฉ์๋๋ฅผ ์ฌ์ฉํด๋, ๋ด๋ถ์ ์ผ๋ก.on()
๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ๋ฐ์ธ๋ฉํ๋ค.
์ด๋ฒคํธ ์ฒ๋ฆฌ์ ๋ฐ์
jQuery์ ๋ฐ์ ์ ๋ฐ๋ผ ์ด๋ฒคํธ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด ์ญ์ ๋ณํด์๋ค.
jQuery 1.0์์๋ .bind()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฒคํธํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํ๋ค.
๊ทธ ๋ค์์๋ .live()
๋ฉ์๋์ .delegate()
๋ฉ์๋๋ฅผ ๊ฑฐ์ณ ํ์ฌ๋ .on()
๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์๋ค.
2. .on() ๋ฉ์๋
jQuery๋ ํน์ ์์์ ์ด๋ฒคํธ ๋ฐ์ธ๋ฉ(event binding)ํ๊ธฐ ์ํด .on()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค. jQuery 1.7๋ถํฐ ์๊ฐ๋ .on()
๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ง๋ค.
- ์ ํํ ์์์ ์ด๋ค ํ์ ์ ์ด๋ฒคํธ๋ผ๋ ์ฐ๊ฒฐํ ์ ์๋ค.
- ํ๋์ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ์ฌ๋ฌ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ๋์์ ์ฐ๊ฒฐํ ์ ์๋ค.
- ์ ํํ ์์์ ์ฌ๋ฌ๊ฐ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ์ฌ๋ฌ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ด ์ฐ๊ฒฐํ ์ ์๋ค.
- ์ฌ์ฉ์ ์ง์ ์ด๋ฒคํธ(custom event)๋ฅผ ์ํด ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ธธ ์ ์๋ค.
- ์ฐจํ์ ๋ค๋ฃจ๊ฒ ๋ ์์๋ฅผ ์ด๋ฒคํธ์ ๋ฐ์ธ๋ฉํ ์ ์๋ค.
[์์ ] :: ์์๋ฅผ ํด๋ฆญํ์ ๋ ์๋ฆผ์ฐฝ์ด ์ผ์ง๋ ์์ ์ด๋ค.
$('p').on('click', function() {
alert('๋ฌธ์ฅ์ด ํด๋ฆญ๋์์ต๋๋ค.');
});
[์์ ] :: ์ด๋ฒคํธ ํธ๋ค๋ฌ ํ๋์ ์ด๋ฒคํธ๋ฅผ ์ฌ๋ฌ๊ฐ ์ค์ ํ ์ ์๋ค.
$('p').on('mouseenter mouseleave', function() {
$('div').append('๋ง์ฐ์ค ์ปค์๊ฐ ๋ฌธ์ฅ์๋ก ๋ค์ด์ค๊ฑฐ๋ ๋น ์ ธ ๋๊ฐ์ต๋๋ค.<br />');
});
[์์ ] :: ํ๋์ ์์์ ์ฌ๋ฌ๊ฐ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ฌ์ฉํด ์ฌ๋ฌ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ด ๋ฐ์ธ๋ฉํ ์ ์๋ค.
$('p').on({
click : function() {
$('div').append('๋ง์ฐ์ค๊ฐ ๋ฌธ์ฅ์ ํด๋ฆญํ์ต๋๋ค.<br />');
},
mouseenter : function() {
$('div').append('๋ง์ฐ์ค ์ปค์๊ฐ ๋ฌธ์ฅ ์๋ก ๋ค์ด์์ต๋๋ค.<br />');
},
mouseleave : function() {
$('div').append('๋ง์ฐ์ค ์ปค์๊ฐ ๋ฌธ์ฅ์ ๋น ์ ธ๋๊ฐ์ต๋๋ค.<br />');
}
});
3. off() ๋ฉ์๋
.off()
๋ฉ์๋๋ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ์ด๋ฒคํธ์์ ๋ฐ์ธ๋ฉ(binding)์ ์ ๊ฑฐํ๋ค.
$('#btn').on('click', function() {
alert('๋ฒํผ์ ํด๋ฆญํ์ต๋๋ค.');
});
$('#btnBind').on('click', function() {
$('#btn').on('click').text('๋ฒํผ ํด๋ฆญ ๊ฐ๋ฅ');
});
$('#btnUnbind').on('click', function() {
$('#btn').off('click').text('๋ฒํผ ํด๋ฆญ ๋ถ๊ฐ๋ฅ');
});
4. one() ๋ฉ์๋
.one()
๋ฉ์๋๋ ๋ฐ์ธ๋ฉ(binding)๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ํ ๋ฒ๋ง ์คํ๋๊ณ ๋์๋ ๋๋ ์คํ๋์ง ์๋๋ค.
$('button').one('click', function() {
$('div').append('์ด์ ํด๋ฆญ์ด ๋์ง ์์ต๋๋ค.<br />');
});
.one()
๋ฉ์๋๋ .on()
๋ฉ์๋์ ๊ฐ์ ์ธ์๋ฅผ ์ ๋ฌ๋ฐ๋๋ค.
๋ฐ๋ผ์ ์ฌ๋ฌ๊ฐ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ์ฌ๋ฌ๊ฐ์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์ง ์ ์๋ ๋ฑ .on()
๋ฉ์๋์ ๊ฐ์ ํน์ง์ ๊ฐ๋๋ค.
'๐ฉ๐ปโ๐ปSTUDY > jQuery' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[jQuery] :visible ์กฐ๊ฑด (1) | 2020.04.01 |
---|---|
[jQuery] ํํฐ๋ง๋ฉ์๋ first() last() eq() filter() not() has() is() map() slice() (0) | 2020.02.18 |
[jQuery] queue() & dequeue() (0) | 2020.02.07 |
[jQuery] ready() load() ์ฐจ์ด (0) | 2020.02.05 |
[jQuery] stop() & clearQueue() & delay() (0) | 2020.02.04 |