[javascript] window.onload 대 $ (document) .ready ()

JavaScript window.onload와 jQuery $(document).ready()방법 의 차이점은 무엇입니까 ?



답변

readyHTML 문서가로드 된 후 동안 이벤트가 발생 onload모든 컨텐츠 (예 : 이미지)도로드 된 경우 이벤트가 나중에 발생합니다.

onload그동안 이벤트는 DOM의 표준 이벤트 ready이벤트가 jQuery를 특정입니다. 이 ready이벤트 의 목적은 문서가로드 된 후 가능한 빨리 발생하므로 페이지의 요소에 기능을 추가하는 코드가 모든 내용이로드 될 때까지 기다릴 필요가 없다는 것입니다.


답변

window.onload는 기본 제공 자바 스크립트 이벤트이지만, 구현시 브라우저 (Firefox, Internet Explorer 6, Internet Explorer 8 및 Opera )에서 미묘한 차이 가 있으므로 jQuery는 이를 추상화하고 페이지의 DOM이 준비 되 자마자 실행됩니다. (이미지 등을 기다리지 않습니다).document.ready

$(document).ready(그것의주의 하지 document.ready 정의되어 있지 않습니다) JQuery와 기능, 포장 및 제공 의 일관성을 다음 이벤트에 :

  • document.ondomcontentready/ document.ondomcontentloaded-문서의 DOM이로드 될 때 발생하는 새로운 이벤트 ( 이미지 등이로드 되기 까지 다소 시간이 걸릴 수 있음 ); 다시 말하지만 Internet Explorer와 다른 국가에서는 약간 다릅니다.
  • window.onload(심지어 오래된 브라우저에서 구현되는)하는 화재 때 전체 페이지가로드 (이미지, 스타일 등)

답변

$(document).ready()jQuery 이벤트입니다. $(document).ready()DOM이 준비 되 자마자 JQuery의 메소드가 호출됩니다 (즉, 브라우저가 HTML을 구문 분석하고 DOM 트리를 빌드했음을 의미 함). 이를 통해 문서를 조작 할 준비가되는 즉시 코드를 실행할 수 있습니다.

예를 들어, 브라우저가 DOM이 아닌 많은 브라우저에서와 같이 DOMContentLoaded 이벤트를 지원하면 해당 이벤트에서 시작됩니다. DOMContentLoaded 이벤트는 IE9 +의 IE에만 ​​추가되었습니다.

이를 위해 두 가지 구문을 사용할 수 있습니다.

$( document ).ready(function() {
   console.log( "ready!" );
});

또는 속기 버전 :

$(function() {
   console.log( "ready!" );
});

주요 포인트 $(document).ready():

  • 이미지가로드 될 때까지 기다리지 않습니다.
  • DOM이 완전히로드 될 때 JavaScript를 실행하는 데 사용됩니다. 이벤트 핸들러를 여기에 넣으십시오.
  • 여러 번 사용할 수 있습니다.
  • 교체 $jQuery당신이받을 때 “$가 정의되지 않았습니다.”
  • 이미지를 조작하려는 경우 사용되지 않습니다. $(window).load()대신 사용하십시오 .

window.onload()기본 JavaScript 함수입니다. 이 window.onload()이벤트는 DOM (문서 개체 모델), 배너 광고 및 이미지를 포함하여 페이지의 모든 콘텐츠가로드되면 시작됩니다. 이 둘의 또 다른 차이점 $(document).ready()은 하나 이상의 onload기능을 가질 수 있지만 하나의 기능 만 가질 수 있다는 것 입니다.


답변

Windows로드 페이지의 모든 내용이 완전히 DOM (문서 객체 모델) 내용을 포함한로드 이벤트가 발생 비동기 자바 스크립트 , 프레임과 이미지 . body onload =를 사용할 수도 있습니다. 둘 다 동일합니다. window.onload = function(){}<body onload="func();">같은 이벤트를 사용하여 여러 가지 방법이 있습니다.

jQuery$document.ready 함수 이벤트는 조금 더 일찍 실행 window.onload되며 DOM (Document Object Model)이 페이지에로드되면 호출됩니다. 이미지, 프레임이 완전히로드 될 때까지 기다리지 않습니다 .

다음 문서에서 발췌 :
어떻게 $document.ready()다른window.onload()


답변

$(document).ready(function() {

    // Executes when the HTML document is loaded and the DOM is ready
    alert("Document is ready");
});

// .load() method deprecated from jQuery 1.8 onward
$(window).on("load", function() {

     // Executes when complete page is fully loaded, including
     // all frames, objects and images
     alert("Window is loaded");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>


답변

$(document).ready()Internet Explorer와 함께 사용할 때주의해야 할 사항입니다 . 전체 문서가로드 되기 전에 HTTP 요청이 중단되면 (예 : 페이지가 브라우저로 스트리밍되는 동안 다른 링크가 클릭 됨) IE가 $(document).ready이벤트 를 트리거합니다 .

$(document).ready()이벤트 내의 코드가 DOM 객체를 참조하는 경우 해당 객체를 찾지 못할 가능성이 있으며 Javascript 오류가 발생할 수 있습니다. 해당 객체에 대한 참조를 보호하거나 해당 객체를 참조하는 코드를 window.load 이벤트로 연기하십시오.

다른 브라우저 (특히 Chrome 및 Firefox)에서이 문제를 재현 할 수 없었습니다.


답변

작은 팁 :

항상window.addEventListener 창을 사용하여 이벤트를 추가하십시오. 그렇게하면 다른 이벤트 핸들러에서 코드를 실행할 수 있습니다.

올바른 코드 :

window.addEventListener('load', function () {
  alert('Hello!')
})

window.addEventListener('load', function () {
  alert('Bye!')
})

유효하지 않은 코드:

window.onload = function () {
  alert('Hello!') // it will not work!!!
}

window.onload = function () {
  alert('Bye!')
}

이것은 onload가 단지 객체의 속성이기 때문에 덮어 쓰기 때문입니다.

와 유추하여 onload보다는 addEventListener사용하는 $(document).ready()것이 좋습니다.