자바스크립트의 window.onload
와 jQuery의 $(document).ready()
메서드의 차이점은 무엇인가요?
window.onload는 내장 자바스크립트 이벤트이지만, 브라우저마다 구현에 *미묘한* 차이가 있기 때문에(Firefox, Internet&Explorer&6, Internet&Explorer&8, [Opera][1]), jQuery는 이를 추상화하여 페이지의 DOM이 준비되자마자(이미지 등을 기다리지 않고) 실행되는
document.ready`를 제공합니다.
(정의되지 않은 document.ready
가 아닌) $(document).ready
는 다음 이벤트에 정합성을 래핑하고 제공하는 jQuery 함수입니다:
document.ondomcontentready
/ document.ondomcontentloaded
; 인터넷 익스플로러와 그 외의 다른 브라우저에서는 약간 다릅니다.'$ (document) 그레이디 ()' 은 jQuery 이벤트. JQuery 의 $ (document) 그레이디 () '가' 라는 방법을 DOM 준비가 끝나는 대로 () 는 HTML DOM 진단트리는 있지만브라우저에 즉 구문 분석 및 제작). 이 문서는 즉시 준비됐어들 조작할 수 있는 코드를 실행할 수 있습니다.
예를 들어, 있지만브라우저에 up1 동콘텐트로데트 이벤트 (많은 비 ie 브라우저 책임질래) 한 후, 불지옥의 이벤트 있는 것으로 보인다. (참고로, IE 에서 추가된 IE9+ 동콘텐트로데트 이벤트 불과했다.)
이 두 구문을 사용할 수 있습니다.
$( document ).ready(function() {
console.log( "ready!" );
});
또는 대표 버전:
$(function() {
console.log( "ready!" );
});
$ (document) 그레이디 () "에 대한 주요 사항을 ':
'빈다우드로 로이드 ()' () 는 JavaScript 함수. 이 때 ' ()' 이벤트 페이지에는 빈다우드로 로이드 화재 등 모든 내용을 로드되었는지 DOM (document object model), 배너 광고, 이미지. 반면 또 다른 차이점은 2$ (document) 그레이디 () 는 우리가 할 수 있는 둘 이상의 '우리는 하나' () '기능을 onload' 기능이 있을 수 있습니다.
A indows 로드형 이벤트 페이지에 화재 때 모든 내용이 완전히 로드되었는지 DOM (document object model) 등 콘텐츠 및 , asynchronous JavaScript 프레임이면 및 이미지. Body onload = 사용할 수도 있습니다. 모두 동일합니다. 함수 () {} '와', 'body onload < 빈다우드로 로이드 =, = " " > func ();;;' 이 같은 여러 가지 방법을 사용하여 이벤트.
다음 문서를 가져온 것입니다. [빈다우드로 로이드 () '' 어떻게 '다르다' $ 도쿠망드리디 ()] (http://www.dotnetbull.com/2013/08/document-ready-vs-window-onload.html)
Internet Explorer에서 $(document).ready()
를 사용할 때 주의할 점이 있습니다. 전체 문서가 로드되기 전에 HTTP 요청이 중단되면(예를 들어 페이지가 브라우저로 스트리밍되는 동안 다른 링크를 클릭하는 경우) IE는 $(document).ready
이벤트를 트리거합니다.
(document).ready()` 이벤트 내의 코드가 DOM 객체를 참조하는 경우 해당 객체를 찾을 수 없을 가능성이 있으며 자바스크립트 오류가 발생할 수 있습니다. 해당 객체에 대한 참조를 보호하거나 해당 객체를 참조하는 코드를 window.load 이벤트로 연기하세요.
다른 브라우저(특히 Chrome 및 Firefox)에서 이 문제를 재현할 수 없었습니다.
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
$(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>
끝 - < 스니핏 >;!
올바른 번호:*
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
window.addEventListener('load', function () {
alert('Hello!')
})
window.addEventListener('load', function () {
alert('Bye!')
})
끝 - < 스니핏 >;!
<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. > 거짓값 -;
window.onload = function () {
alert('Hello!') // it will not work!!!
}
window.onload = function () {
alert('Bye!')
}
끝 - < 스니핏 >;!
이제 막 재산에 객체에는 덮어쓰여집니다 onload 때문이다.
유추 (를) '에서' $ (document) 그레이디 (), 사용하는 것이 좋습니다 addEventListener '보다는' onload.
'$ (document) 오언 (& # 39,, # 39 ready& 처리기에서)' 에서 하는 이벤트 준비 바인딩됩니다 포함한다. 이 때 DOM 로드되었는지 처리기에서 호출됨 . 이미지 아마 같은 에셋을 아직도 누각되었습니다 . 이 문서는 호출할 때 결코 경우 준비됐어들 바인딩하면. jQuery 는 [ 동콘텐트로데트 ], 1 - 행사를 에뮬레이션할 수 있는 경우 사용할 수 없습니다.
'$ (document) 오언 (& # 39,, # 39 load& 처리기에서)' 는 이벤트를 한 번 서버에서 사용할 수 있도록 하는 모든 리소스에는 로드되었는지 발사했다. 이제 이미지 로드되었는지. 한편 onload 는 3, [준비됐어들] 이벤트 기초형상 HTML 에서 편차란 포함한다.
실제로 '$ (document) 그레이디 (처리기에서)' 는 약속하나요. 이 문서가 바로 호출할 때 처리기에서 경우 그렇지 않은 경우에는 '준비' 를 준비됐어들 calling. 바인딩됩니다 이벤트.
5, [전 jQuery 1.8] '$ (document)' $ (document) 를 트로이드 (처리기에서) '로 있을경우에 앨리어스를 오언 (& # 39,, # 39 load& 처리기에서)'.
이 '$ (document) 그레이디 ()' 은 HTML 문서가 발견됐다고 jQuery 이벤트 때 발생하는 반면, '나중에' 이벤트가 발생할 때 완전 로드됨 빈다우드로 로이드 포함한 모든 페이지의 이미지 로드됨.
또한 javascript 는 순수한 빈다우드로 로이드 '$ (document) 그레이디 ()' 의 이벤트를 DOM, 반면 이벤트는 방법을 포함한다.
'$ (document) 그레이디 ()' 는 보통 위한 래퍼 (jQuery 를 사용할 수 있는 모든 급지된 smartupdate 요소를 포함한다.
jQuery.ready.promise = function( obj ) {
if ( !readyList ) {
readyList = jQuery.Deferred();
// Catch cases where $(document).ready() is called after the browser event has already occurred.
// we once tried to use readyState "interactive" here, but it caused issues like the one
// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
if ( document.readyState === "complete" ) {
// Handle it asynchronously to allow scripts the opportunity to delay ready
setTimeout( jQuery.ready );
// Standards-based browsers support DOMContentLoaded
} else if ( document.addEventListener ) {
// Use the handy event callback
document.addEventListener( "DOMContentLoaded", completed, false );
// A fallback to window.onload, that will always work
window.addEventListener( "load", completed, false );
// If IE event model is used
} else {
// Ensure firing before onload, maybe late but safe also for iframes
document.attachEvent( "onreadystatechange", completed );
// A fallback to window.onload, that will always work
window.attachEvent( "onload", completed );
// If IE and not a frame
// continually check to see if the document is ready
var top = false;
try {
top = window.frameElement == null && document.documentElement;
} catch(e) {}
if ( top && top.doScroll ) {
(function doScrollCheck() {
if ( !jQuery.isReady ) {
try {
// Use the trick by Diego Perini
// http://javascript.nwbox.com/IEContentLoaded/
top.doScroll("left");
} catch(e) {
return setTimeout( doScrollCheck, 50 );
}
// detach all dom ready events
detach();
// and execute any waiting functions
jQuery.ready();
}
})();
}
}
}
return readyList.promise( obj );
};
jQuery.fn.ready = function( fn ) {
// Add the callback
jQuery.ready.promise().done( fn );
return this;
};
또한 나는 창조하 이미지 아래 빠른 참조입니다 모두 사용할 수 있습니다.
'때' (a jQuery 이벤트) 가 불지옥의 도쿠망드리디 배치하십시오 참조할 수 있는 모든 요소가 있지만, 그들은 JavaScript 코드를 로드되었는지 컨텐트에서 아니다. '때' 도쿠망드리디 실행하므로 HTML 문서를 로드되었는지.
$(document).ready(function() {
// Code to be executed
alert("Document is ready");
});
그러나 빈다우드로이드 기다리는 수 있는 '페이지' 완전 로드됨. 여기에는 프레임, 이미지, 내부 상술합니다.
$(window).load(function() {
//Fires when the page is loaded completely
alert("window is loaded");
});
한 기억해야 할 수 없다는 (혹은 내가 말하도다 재호출) '와' 준비 'onload 마치 스택할 수 있습니다. 즉, jQuery 를 통해 여러 마법 같은 페이지에 있는 # 39 의 '준비됐어들 확장하지만 can& 함께', 'onload 할 수 없다.
이전의 어떤 '마지막' 은 'onload 취소할 onload 의.
대처할 수 있는 좋은 방법을 쓴 것을 분명히 한 함수은 사이몬씨세요 윌리슨 및 설명되어 있습니다 여러 기능을 사용하여 JavaScript Onload .
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
}
else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}
// Example use:
addLoadEvent(nameOfSomeFunctionToRunOnPageLoad);
addLoadEvent(function() {
/* More code to run on page load */
});
이 도쿠망드리디 이벤트가 발생할 때, HTML 문서 및 이벤트가 발생할 때 항상 '나중에' 빈다우드로 로이드 로드되었는지 (그림 등), 모든 컨텐츠를 로드했습니다.
지금 ',' 이벤트 스케쳐내 " early" 도쿠망드리디 사용할 수 있습니다. 기다리지 않고, 내 이미지 렌더링 과정을 로드하기에. 필요한 경우 이미지 (또는 다른 " content";) 전에 스크립트에 준비됐어들 " something" 않으며, '' 빈다우드로 로이드 때까지 기다려야 합니다.
예를 들어, 구축한다면 Show" 슬라이드에서는 "; 패턴, 계산을 수행하는 데 필요한 이미지 크기를 기준으로 '' 빈다우드로 로이드 때까지 기다려야 할 수도 있습니다. 그렇지 않으면 문제가 발생할 수 있는 방법에 따라 일부 임의적입니까 로드되었는지 파르게 이미지를 얻게 됩니다. 동시에 실행되는 스레드를 사용하여 너회의 스크립트입니다 약간만이라도 loads 이미지. 이 경우, 또는 스크립트입니다 충분히 만족할 만큼 빠르게 할 수 없는 문제가 발생할 경우 서버가 디이브이 이미지를생성하여 도착할 예정 시간. 하지만 가장 안전한 방법은 약간만이라도 로드되었는지 이미지를 얻을 수 있습니다.
좋은 이벤트 ',' 도쿠망드리디 당신꺼에요 일부 " loading." 표시하십시오 될 수 있다. 그 때 ',' 빈다우드로 로이드 예증으로 사용자에게 필요한 자원을 모두 완료할 수 있습니다, 마지막으로 " 분리하십시오 스크립팅하는 로드되었는지 Loading."; 사인이야.
예:
// document ready events
$(document).ready(function(){
alert("document is ready..");
})
// using JQuery
$(function(){
alert("document is ready..");
})
// window on load event
function myFunction(){
alert("window is loaded..");
}
window.onload = myFunction;
$ (document) 그레이디 (f), when you say '' 네가 스크립트 엔진을 다음 작업을 수행할 수 있습니다.
2 인 경우, 이 가장 규모가 큰 일을 할 수 있지만, 해시 테이블 조회에 that& # 39 의 무시하고 jQuery 는 모든 가능한 입력, 여기서 '에서 $' the kitchen sink jQuery 도왔으매 매핑해야 쿼리하지 디스패치합니다 처리기에서 해결하십시오 다른 거기 있을 것으로 보인다.
이렇게 할 수도 있습니다.
window.onload = function() {...}
이를
가장 필요한 경우, 이 비용 때문에 하나의 해시 테이블 조회, 이는 '' onload 반입됨 합니다.
Jquery 를 할 수 있는 이상적인 컴파일하십시오 아니하였으매 그들의 쿼리합니다 문장열 붙여넣습니다 너희는너희가 그들이성년에 jQuery 의 할 수 없이 디스패치하기 런타임용으로 개발하십시오 포함한다. 이 방법은 두 가지 옵션을 가지고 있다.