質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

3回答

1937閲覧

window.addEventListener('DOMContentLoaded',...) を採用する理由

think49

総合スコア18162

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

3クリップ

投稿2019/08/07 11:55

本人に質問して回答が得られなかった為、第三者視点の回答をお願いします。

javascript

1window.addEventListener('DOMContentLoaded', listener, false);

上記コードのように、window.addEventListenerDOMContentLoaded のイベントリスナを定義するコードの回答を続けている方がいます。
特に何らかの条件があるわけではなく、一律に window.addEventListener を使用しており、document.addEventListener では動かないコードではないようです。
あえて、window.addEventListener を採用する理由(メリット等)としてどのようなものが考えられるでしょうか。

x_x👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ページの状態を拾うのは一般的にwindowを利用するから、
windowで統一しておいたほうが混乱がないからです。
以下だとdoc dom→win dom→win load→win showとイベントが拾われていきます

javascript

1window.addEventListener('pageshow', function(e){ 2 console.log("win show"); 3}); 4window.addEventListener('load', function(e){ 5 console.log("win load"); 6}); 7window.addEventListener('DOMContentLoaded', function(e){ 8 console.log("win dom"); 9}); 10document.addEventListener('pageshow', function(e){ 11 console.log("doc show"); //拾えない 12}); 13document.addEventListener('load', function(e){ 14 console.log("doc load"); //拾えない 15}); 16document.addEventListener('DOMContentLoaded', function(e){ 17 console.log("doc dom"); 18});

実際にはdoc domのときにはページのdomは解釈されています。
つまりdocumentがだめということではありません。

投稿2019/08/07 12:18

yambejp

総合スコア114833

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

think49

2019/08/07 12:47

> 以下だとdoc dom→win dom→win load→win showとイベントが拾われていきます 実行順を考える場合、イベントの実行順(DOMContentLoaded -> pageshow -> load)とバブリングフェーズの実行順(document -> window)は区別する事になると考えます。 window, document の違いはイベントの実行順に影響しません。 > ページの状態を拾うのは一般的にwindowを利用するから、 この考えは「ページ全体を表す場合は、document ではなく、window に統一した方が分かりやすい」というものでしょうか。 つまり、document を排除して、window に統一する…というような。 window.addEventListener('click', listener, false); window.addEventListener('focus', listener, true);
guest

0

https://codingrepo.com/javascript/2016/08/24/javascript-execution-order-domcontentloaded-load-window-document/

によるとwindow.addEventListener('load')は発生するがdocument.addEventListener('load')は発生しないそうです。
loadつながりで覚えているのではないでしょうか。

投稿2019/08/07 12:16

querykuma

総合スコア777

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

think49

2019/08/07 23:30

イベントバブリングで window に伝播する DOMContentLoaded と、初めからイベント発生源が window の load では、動作原理が異なる部分はありますね。 発端となった方の認識は「ページの状態 = window」という事でした。
guest

0

window.addEventListenerを採用する理由(メリット等)はないです。

DOMContentLoadedイベントは、最初のHTMLドキュメントの読み込みと解析が完了した時に、
スタイルシートや画像、サブフレームの読み込みが終わるのを待たずに発火するのだから
用途を考えたらdocument.addEventListener("DOMContentLoaded", 〜で間違いないです。
https://developer.mozilla.org/ja/docs/Web/Events/DOMContentLoaded
https://html.spec.whatwg.org/multipage/parsing.html#the-end

投稿2019/08/07 12:02

yasutomi

総合スコア2937

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

think49

2019/08/07 12:13 編集

> DOMContentLoadedイベントは、最初のHTMLドキュメントの読み込みと解析が完了した時に、スタイルシートや画像、サブフレームの読み込みが終わるのを待たずに発火する ここまでは分かります。 > のだから、用途を考えたらdocument.addEventListener("DOMContentLoaded", 〜で間違いないです。 突然、結論にジャンプしているように読めて、過程が分かりません。
think49

2019/08/07 12:15

↑の追加質問は上手い表現ではなかった為、追加質問の文面を修正しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問