window.onload
JavaScriptと jQuery の$(document).ready()
メソッドの違いは何ですか?
17 に答える
このready
イベントは、HTML ドキュメントが読み込まれた後にonload
発生しますが、イベントは後ですべてのコンテンツ (画像など) も読み込まれたときに発生します。
onload
イベントは DOM の標準イベントですが、イベントready
は jQuery に固有です。このイベントの目的はready
、ページ内の要素に機能を追加するコードがすべてのコンテンツが読み込まれるのを待つ必要がないように、ドキュメントが読み込まれた後できるだけ早く発生することです。
window.onload
は組み込みの JavaScript イベントですが、その実装にはブラウザー (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
も実装されています)、ページ全体(画像、スタイルなど)がロードされたときに起動します.
Windows ロードイベントは、ページ上のすべてのコンテンツ (DOM (ドキュメント オブジェクト モデル) コンテンツと非同期 JavaScript、フレーム、およびイメージを含む) が完全に読み込まれると発生します。body onload= を使用することもできます。どちらも同じです。window.onload = function(){}
と<body onload="func();">
は、同じイベントを使用するさまざまな方法です。
jQuery$document.ready
関数イベントは、DOM (ドキュメント オブジェクト モデル) がページに読み込まれるよりも少し早く実行され、window.onload
呼び出されます。画像やフレームが完全に読み込まれるまで待機しません。
次の記事から引用:
how $document.ready()
is different fromwindow.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) ではこの問題を再現できませんでした。
イベント
$(document).on('ready', handler)
jQuery からの ready イベントにバインドします。ハンドラーは、DOM がロードされるときに呼び出されます。画像などのアセットがまだ見つからない可能性があります。製本時にドキュメントの準備ができている場合は呼び出されません。jQuery はそのためにDOMContentLoaded -Event を使用し、利用できない場合はエミュレートします。
$(document).on('load', handler)
すべてのリソースがサーバーからロードされると発生するイベントです。画像が読み込まれます。onloadは生の HTML イベントですが、readyはjQuery によって構築されます。
機能
$(document).ready(handler)
実際には約束です。呼び出し時にドキュメントの準備ができている場合、ハンドラーはすぐに呼び出されます。ready
それ以外の場合は、 -Eventにバインドされます。
jQuery 1.8 より前は$(document).load(handler)
、 のエイリアスとして存在していました$(document).on('load',handler)
。
参考文献
覚えておかなければならないことの 1 つ (というか、思い出す必要があります) は、onload
のように s をスタックできないことですready
。つまり、jQuery マジックready
では同じページで複数の を使用できますが、onload
.
最後のonload
は、それ以前onload
の を無効にします。
これに対処する良い方法は、明らかに Simon Willison によって書かれ、Using Multiple JavaScript Onload Functionsで説明されている関数を使用することです。
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 */
});
Document.ready
(jQuery イベント) は、すべての要素が配置され、JavaScript コードで参照できる場合に発生しますが、コンテンツが読み込まれるとは限りません。Document.ready
HTML ドキュメントがロードされたときに実行されます。
$(document).ready(function() {
// Code to be executed
alert("Document is ready");
});
ただし、window.load
ページが完全に読み込まれるまで待機します。これには、内部フレーム、画像などが含まれます。
$(window).load(function() {
//Fires when the page is loaded completely
alert("window is loaded");
});
document.ready イベントは、HTML ドキュメントがロードされたときに発生し、window.onload
イベントはすべてのコンテンツ (画像など) がロードされた後で常に発生します。
document.ready
イメージの読み込みを待たずに、レンダリング プロセスの「早い段階」に介入したい場合は、このイベントを使用できます。スクリプトが「何かを実行する」前に画像 (またはその他の「コンテンツ」) の準備が必要な場合は、 まで待つ必要がありますwindow.onload
。
たとえば、「スライド ショー」パターンを実装していて、画像サイズに基づいて計算を実行する必要がある場合は、 まで待つことをお勧めしますwindow.onload
。そうしないと、画像が読み込まれる速度によっては、ランダムな問題が発生する可能性があります。スクリプトは、画像をロードするスレッドと同時に実行されます。スクリプトが十分に長い場合、またはサーバーが十分に高速である場合、イメージがたまたま時間内に到着しても、問題に気付かないことがあります。ただし、最も安全な方法は、画像の読み込みを許可することです。
document.ready
ユーザーに「読み込み中...」のサインを表示するのは良いイベントかもしれません。window.onload
その後、リソースの読み込みが必要なスクリプトをすべて完了し、最後に「読み込み中...」のサインを削除できます。
例:-
// 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;