Skip to content

jquery_event_handling

KyusungDev edited this page Jun 11, 2017 · 5 revisions

์ด๋ฒคํŠธ ์บก์ฒ˜๋ง๊ณผ ๋ฒ„๋ธ”๋ง

DOM ์š”์†Œ๊ฐ€ ๊ฒน์ณ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ๊ฐ€์žฅ ํ•˜์œ„ ์š”์†Œ์— ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ์š”์†Œ๊นŒ์ง€ ์ด๋ฒคํŠธ๊ฐ€ ์ „๋‹ฌ๋˜๊ณ  ๋‹ค์‹œ ์ƒ์œ„๋กœ ์ „๋‹ฌ๋œ๋‹ค. ์ด ์ƒํ™ฉ์—์„œ ํ•˜์œ„ ์š”์†Œ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ์บก์ฒ˜๋ง์ด๋ผ๊ณ  ํ•˜๊ณ , ์ด๋ฒคํŠธ๊ฐ€ ํ•˜์œ„ ์š”์†Œ์—์„œ ์ƒ์œ„ ์š”์†Œ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒƒ์„ ๋ฒ„๋ธ”๋ง์ด๋ผ๊ณ  ํ•œ๋‹ค.

์ด๋ฒคํŠธ ์บก์ฒ˜๋ง ๋™์ž‘์—์„œ ์ด๋ฒคํŠธ ์ „๋‹ฌ ์ฐจ๋‹จ
์ด๋ฒคํŠธ ์บก์ฒ˜๋ง์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ•˜์—ฌ ์ƒ์œ„ ์ด๋ฒคํŠธ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ํ•˜์œ„ ์š”์†Œ์— ์ด๋ฒคํŠธ ์ „๋‹ฌ์„ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.
์˜ˆ์ œ: ์ด๋ฒคํŠธ ์บก์ฒ˜๋ง์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ ์ „๋‹ฌ ์ฐจ๋‹จ

ํ™œ์šฉ

  • ๋‹ค์ˆ˜์˜ DOM์— ํ•œ๊บผ๋ฒˆ์— ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ํ• ๋‹นํ•ด์•ผ ํ•  ๋•Œ
  • ๋™์ ์ธ DOM์— ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ๋ฅผ ๊ทธ๋•Œ๊ทธ๋•Œ ํ• ๋‹นํ•ด์•ผ ํ•  ๋•Œ

์˜ˆ๋ฅผ ๋“ค์–ด, 10000๊ฐœ์˜ Cell์— ์ด๋ฒคํŠธ๋ฅผ ํ• ๋‹นํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์—์„œ ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ๋ฅผ ํ• ๋‹นํ•˜๋А๋ผ ๋ฉˆ์นซ๊ฑฐ๋ฆฌ๊ฒŒ ๋˜์–ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ๋‚˜๋น ์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์—์„œ ๋งŽ์€ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ํ• ๋‹นํ•˜๊ธฐ๋ณด๋‹ค๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•˜๋‚˜์˜ ๋ถ€๋ชจ DOM์— ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ๋ฅผ ํ• ๋‹นํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ด๋ฒคํŠธ ๋ธ๋ฆฌ๊ฒŒ์ด์…˜ ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค.

์ด๋ฒคํŠธ ์บก์ฒ˜๋ง์ด๋‚˜ ๋ฒ„๋ธ”๋ง์„ ํ•ด์•ผํ•ด์„œ <body>์ฒ˜๋Ÿผ ์•„์ฃผ ์ƒ์œ„์˜ DOM์— ์ด๋ฒคํŠธ๋ฅผ ๊ฑธ๊ฒŒ ๋˜๋ฉด ๊ฐ๊ฐ์˜ ๋ชจ๋“  ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ž์›์ด ์ง์ ‘ HTML DOM๋งˆ๋‹ค ์ด๋ฒคํŠธ๋ฅผ ๊ฑฐ๋Š” ๊ฒƒ๋ณด๋‹ค ๋งŽ์„ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์—์„œ์˜ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜๊ณผ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๋‚˜์„œ์˜ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์˜ ์ฐจ์ด๋ฅผ ์ž˜ ๊ณ ๋ คํ•˜์—ฌ ์ ๋‹นํ•œ ์„ ์˜ wrapper๋ฅผ ๊ฒฐ์ •ํ•ด์„œ ์ด๋ฒคํŠธ ๋ธ๋ฆฌ๊ฒŒ์ด์…˜ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์ฐธ๊ณ : ์ด๋ฒคํŠธ ๋ธ๋ฆฌ๊ฒŒ์ด์…˜ ํŒจํ„ด

jQuery ์ด๋ฒคํŠธ์— ๋™์ž‘๋ฐฉ์‹

jQuery๋Š” ์ด๋ฒคํŠธ ์บก์ณ๋ง์„ ์ง€์›ํ•˜์ง€ ์•Š๊ณ , ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
์ค‘์ฒฉ๋œ ์š”์†Œ์— ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ•ด๋„ ํ•˜์œ„ ์š”์†Œ๊นŒ์ง€ ์ด๋ฒคํŠธ๊ฐ€ ์ „๋‹ฌ๋œ ๋‹ค์Œ ์ƒ์œ„ ์ด๋ฒคํŠธ๋กœ ์ „๋‹ฌํ•˜๋ฉด์„œ(๋ฒ„๋ธ”๋ง) ๋“ฑ๋ก๋œ ์ฝœ๋ฐฑ์„ ํ˜ธ์ถœํ•˜๋Š” ๊ตฌ์กฐ๋‹ค.
๋”ฐ๋ผ์„œ ์ด๋ฒคํŠธ ์บก์ณ๋ง ๋ฐฉ์‹์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, DOM API๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ•œ๋‹ค.

Event capturing jQuery

//Use event capturing instead:
$("body").get(0).addEventListener("click", function(){}, true);

// For cross browser implementation.
var bodyEle = $("body").get(0);
if(bodyEle.addEventListener){
   bodyEle.addEventListener("click", function(){}, true);
}else if(bodyEle.attachEvent){
   document.attachEvent("onclick", function(){
       var event = window.event;
   });
}

์ฐธ๊ณ : Event capturing jQuery

Clone this wiki locally