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

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

[jQuery] ready() load() ์ฐจ์ด

๋ฐ˜์‘ํ˜•

[jQuery] .ready() .load() ์ฐจ์ด

1. load()

  • ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•.
  • JavaScript์ด๋ฒคํŠธ๋ฅผ "๋กœ๋“œ"ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ฐ”์ธ๋“œ ํ•œ๋‹ค.
  • ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๊ณ  ๋ฆฌํ„ด๋œ HTML์—์„œ ์ผ์น˜ํ•˜๋Š” ์š”์†Œ๋ฅผ ๋ฐฐ์น˜ํ•œ๋‹ค.
  • .load( url [,data][, complete]) , ๋ฐ˜ํ™˜๊ฐ’ : jQuery
    • url :: ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ URL์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด.
    • data :: ์„ ํƒ์ ์ธ ์ธ์ž, URL๋กœ ์š”์ฒญ๋ณด๋‚ผ ๋•Œ ๊ฐ™์ด ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด ๋˜๋Š” ๋ฌธ์ž์—ด.
    • complete :: ์š”์ฒญ์ด ์™„๋ฃŒ๋˜๋ฉด ํ˜ธ์ถœ๋˜์–ด์งˆ ์ฝœ๋ฐฑํ•จ์ˆ˜.
$('#result').load('ajax/test.html #container');

์ด ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ajax/test.html ์ปจํ…์ธ ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์ง€๋งŒ jQuery๋Š” ๋ฐ˜ํ™˜๋œ ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ container๋ž€ ID๋ฅผ ๊ฐ€์ง„ ์š”์†Œ๋ฅผ ์ฐพ๋Š”๋‹ค. ์ด ์š”์†Œ์™€ ์š”์†Œ์— ํฌํ•จ๋œ ๋‚ด์šฉ์ด container(ID)๋ฅผ ๊ฐ€์ง„ ์š”์†Œ์— ์‚ฝ์ž…๋˜๋ฉฐ, ๋‚˜๋จธ์ง€ ๋ฐ˜ํ™˜๋œ ๋‚ด์šฉ์€ ๋ฒ„๋ ค์ง„๋‹ค.

jQuery๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ .innerHTML ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ ธ์šด ๋ฌธ์„œ๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  ํ˜„์žฌ ๋ฌธ์„œ์— ์‚ฝ์ž…ํ•œ๋‹ค. ์ด ์ž‘์—…์„ ํ•˜๋Š” ๋™์•ˆ ๋ธŒ๋ผ์šฐ์ €๋Š” ์ข…์ข… ๋ฌธ์„œ ์•ˆ์˜ <html>, <title>, <head>์™€ ๊ฐ™์€ ์š”์†Œ๋“ค์„ ๊ฑธ๋Ÿฌ๋‚ธ๋‹ค.

๊ทธ ๊ฒฐ๊ณผ๋กœ load()๋ฉ”์†Œ๋“œ์— ์˜ํ•ด ๊ฐ€์ ธ์˜จ ์š”์†Œ๋“ค์€ ๋ฌธ์„œ๊ฐ€ ์ง์ ‘ ๋ธŒ๋ผ์šฐ์ €๋กœ ๊ฐ€์ ธ์˜จ ๋ฌธ์„œ์™€ ์ •ํ™•ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

jQuery .load()

 

load()๋Š” ์ด๋ฒคํŠธ์กฐ์ž‘์— ๋Œ€ํ•œ ๋น ๋ฅธ๋ฐฉ๋ฒ•์ธ ๋ฉ”์„œ๋“œ์˜€์ง€๋งŒ, ๋ช‡๊ฐ€์ง€ API ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.

์ด๋ฒคํŠธ .load() ๋ฉ”์„œ๋“œ๊ฐ€ ajax.load() ์™€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”๋ฐ .error()๋ฉ”์„œ๋“œ๊ฐ€ DOM ๋ฉ”์„œ๋“œ๊ฐ€ ํ•œ์ •๋˜์žˆ์–ด window.onerror์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.

๋งŒ์•ฝ load() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์œผ๋ฉด .on() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ. ($('img').load(fn) ์„ $(img).on("load", fn) ์œผ๋กœ ๋ณ€๊ฒฝ.)

$(window).load(function(){ });

// jQuery 3.0 ์ด์ƒ์€ ์•„๋ž˜ ์‚ฌ์šฉ.
$(window).on('load', function(){ });

load vs ready

 

2. ready()

  • DOM์ด ์™„์ „ํžˆ ๋กœ๋“œ๋  ๋•Œ ์‹คํ–‰ํ•  ํ•จ์ˆ˜๋ฅผ ์ง€์ •ํ•œ๋‹ค.
  • ready(handler)
    • handler :: function() / DOM์ด ์ค€๋น„๋œ ํ›„ ์‹คํ–‰ํ•  ํ•จ์ˆ˜.
  • ํŽ˜์ด์ง€์˜ DOM์ด ์•ˆ์ „ํ•˜๊ฒŒ ์กฐ์ž‘๋˜๋ฉด JavaScript ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋“ฑ ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ณด๊ฑฐ๋‚˜ ํŽ˜์ด์ง€๋ฅผ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ์ „์— ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ์— ์ข‹๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €๋Š” ์œˆ๋„์šฐ ๊ฐ์ฒด์— load์ด๋ฒคํŠธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด๋ฏธ์ง€๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋˜์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด ์ด๋ฒคํŠธ๋Š” jQuery๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ $(window).on('load', handler)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.jQuery 1.8์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  jQuery 3.0์—์„œ ์ œ๊ฑฐ๋œ $(document).on('ready', handler)๋„ ์žˆ๋‹ค. ์ด ์ด๋ฒคํŠธ๊ฐ€ ์—ฐ๊ฒฐ๋˜๊ธฐ ์ „์— DOM์ด ์ค€๋น„๋˜๋ฉด ์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.
  • jQuery .ready()
  • ํŽ˜์ด์ง€๊ฐ€ ์™„์ „ํžˆ ๋กœ๋“œ๋˜๊ธฐ ์ „์— ํ•ญ์ƒ DOM์ด ์ค€๋น„๋˜๋‚˜ ์ผ๋ฐ˜์ ์œผ๋กœ .ready() ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์€ ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค.

 

3. (document).ready() vs $(window).load()

[์ถœ์ฒ˜]https://webtip.tistory.com/entry/jQuery-documentready-vs-windowonload

3.1) $(document).ready()

  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ DOM(Documenet Object Model) ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ ์งํ›„ ์‹คํ–‰
  • window.load()๋ณด๋‹ค ๋” ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋˜๋ฉด ์ค‘๋ณต ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•ด๋„ ์„ ์–ธํ•œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰
  • ready๋Š” DOM์ด ์™„์„ฑ๋œ ์ดํ›„์— ํ˜ธ์ถœ๋˜๋Š” callback ํ•จ์ˆ˜

 

#3.2) $(window).load()

  • DOM์˜ standard ์ด๋ฒคํŠธ
  • html์˜ ๋กœ๋”ฉ์ด ๋๋‚œ ํ›„์— ์‹œ์ž‘
  • ํ™”๋ฉด์— ํ•„์š”ํ•œ ๋ชจ๋“  ์š”์†Œ(CSS, JS, image, iframe ๋“ฑ)๋“ค์ด ์›น ๋ธŒ๋ผ์šฐ์ € ๋ฉ”๋ชจ๋ฆฌ์— ๋ชจ๋‘ ์˜ฌ๋ ค์ง„ ๋‹ค์Œ์— ์‹คํ–‰
  • ์ „์ฒด ํŽ˜์ด์ง€์˜ ๋ชจ๋“  ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค์™€ ์ด๋ฏธ์ง€๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ๋ถˆ๋ ค์˜จ ํ›„, ์ž‘๋™ํ•˜๊ฒŒ ๋˜์–ด ์ด๋ฏธ์ง€๊ฐ€ ์•ˆ๋œจ๊ฑฐ๋‚˜ ๋”œ๋ ˆ์ด๊ฐ€ ์ƒ๊ธธ ๋•Œ๋Š” ๊ทธ๋งŒํผ์˜ ์‹œ๊ฐ„์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค.
  • ์™ธ๋ถ€ ๋งํฌ๋‚˜ ํŒŒ์ผ include ์‹œ ๊ทธ ์•ˆ์— window.load ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์œผ๋ฉด ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฉฐ ์ ์šฉ๋˜๋ฉฐ, body onload์ด๋ฒคํŠธ์™€ ๊ฐ™์ด body์—์„œ onload ์ด๋ฒคํŠธ๋ฅผ ์“ฐ๊ฒŒ ๋˜๋ฉด ๋ชจ๋“  window.load() ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒ
  • load๋Š” img์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์š”์†Œ๊ฐ€ ๋ชจ๋‘ load ๋œ ์ดํ›„์— ํ˜ธ์ถœ๋˜๋Š” callback ํ•จ์ˆ˜

DOM์ด ์ƒ์„ฑ๋˜๋ฉด ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ ready

๋ชจ๋“  ์š”์†Œ๋“ค์ด ๋กœ๋”ฉ์™„๋ฃŒ๋˜๋ฉด ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ load

$(document).ready(function(){
  // HTML ๋ฌธ์„œ๊ฐ€ ๋กœ๋“œ๋˜๊ณ  DOM์ด ์ค€๋น„๋˜๋ฉด ์‹คํ–‰
  console.log('document is ready');
});

$(window).load(function() {
  // ๋ชจ๋“  ํ”„๋ ˆ์ž„, ๊ฐ์ฒด, ์ด๋ฏธ์ง€๋ฅผ ํฌํ•จํ•˜์—ฌ ์ „์ฒด ํŽ˜์ด์ง€๊ฐ€ ์™„์ „ํžˆ ๋กœ๋“œ๋˜๋ฉด ์‹คํ–‰
  console.log("window is loaded");
});

 

  • ์˜ˆ์ œ1_๋น ๋ฅธ ์ˆœ์„œ
<body onload= "console.log('body onload');"></body>
// jQuery
$(window).load(function(){ // $(window).on('load', function(){ }); [jQuery 3.0]
  console.log('ํŽ˜์ด์ง€ ๋กœ๋“œ๋จ');
});
// jQuery
$(document).ready(function(){
  console.log('DOM ์ƒ์„ฑ๋จ');
});
// JavaScript
window.onload = function() { // onload๋Š” ํ•œ๋ฒˆ๋งŒ ํ˜ธ์ถœ๊ฐ€๋Šฅ
  console.log('๋กœ๋”ฉ ์™„๋ฃŒ')
};

// DOM ์ƒ์„ฑ๋จ > ๋กœ๋”ฉ ์™„๋ฃŒ > ํŽ˜์ด์ง€ ๋กœ๋“œ๋จ

$(window).load()์™€ $(window).on('load', function(){})์€ ์ˆœ์„œ๋Œ€๋กœ ํ˜ธ์ถœ๋œ๋‹ค.

 

  • ์˜ˆ์ œ2_๋น ๋ฅธ์ˆœ์„œ
<body onload="fn_bodyload()"></body>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
window.onload = function(){
  console.log('call type........0');
};
  
jQuery(document).ready(function(){
  console.log('call type........1');
});
  
(function($){
  console.log('call type........3');
})(jQuery);
  
$(window).load(function(){
  console.log('call type........4');
});
  
function fn_bodyload(){
  console.log('call type........5');
}
  
$(document).ready(function(){
  console.log('call type........2');
})
  
// call type........3, 1, 2, 0, 4
</script>

window.onload๋Š” ๋‹จ ํ•œ๋ฒˆ๋งŒ ์ธ์‹.

body onload๋Š” window.onload์™€ ๊ฐ™์ด ์žˆ์œผ๋ฉด body onload๊ฐ€ ์ธ์‹์ด ์•ˆ๋œ๋‹ค.

 

[์ถœ์ฒ˜]https://handam.tistory.com/70


 

document๊ฐ€ "์ค€๋น„"๋  ๋•Œ๊นŒ์ง€ ํŽ˜์ด์ง€๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์—†๋‹ค. jQuery๋Š” ์ด๋Ÿฌํ•œ ์ค€๋น„์ƒํƒœ๋ฅผ ๊ฐ์ง€ํ•œ๋‹ค.

$(document).ready()์•ˆ์— ํฌํ•จ๋œ ์ฝ”๋“œ๋Š” DOM ํŽ˜์ด์ง€๊ฐ€ JavaScript ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ ์ค€๋น„๊ฐ€ ๋œ ํ›„์—๋งŒ ์‹คํ–‰๋œ๋‹ค.

$(window).on('load', function(){}) ์•ˆ์— ํฌํ•จ๋œ ์ฝ”๋“œ๋Š” DOM ๋ฟ๋งŒ์ด ์•„๋‹Œ ์ „์ฒดํŽ˜์ด์ง€(์ด๋ฏธ์ง€ ๋˜๋Š” iframe)๊ฐ€ ์ค€๋น„๋˜๋ฉด ์‹คํ–‰๋œ๋‹ค.

๋ฐ˜์‘ํ˜•