๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ปSTUDY/jQuery

[jQuery] on() off() one()

๋ฐ˜์‘ํ˜•

[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() ๋ฉ”์†Œ๋“œ์™€ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ–๋Š”๋‹ค.

 

 

๋ฐ˜์‘ํ˜•