回答編集履歴

2

拡張子に関して言及

2020/08/20 09:37

投稿

miyabi_pudding
miyabi_pudding

スコア9528

test CHANGED
@@ -20,7 +20,9 @@
20
20
 
21
21
  <!-- javascriptの読み込み ここに移動 </body>の直前に -->
22
22
 
23
+ <!-- そして、JavaScriptファイルの拡張子は、.jsです。 -->
24
+
23
- <script type="text/javascript" src="index.javascript"></script>
25
+ <script src="index.js"></script>
24
26
 
25
27
  </body>
26
28
 
@@ -95,3 +97,7 @@
95
97
 
96
98
 
97
99
  ということで、JavaScriptで、DOMをコントロールする場合、**HTMLパースが完了してから実行する**ことが重要になります。
100
+
101
+
102
+
103
+ あと、JavaScriptファイルの拡張子は、基本`.js`です。

1

なぜ動作しなかったかを解説を追記

2020/08/20 09:37

投稿

miyabi_pudding
miyabi_pudding

スコア9528

test CHANGED
@@ -59,3 +59,39 @@
59
59
  もし、上記二つともやってだめなら、
60
60
 
61
61
  そもそも**そのJavaScriptファイルの読み込みがされていません**ので、ファイルのパスなどを確認してください。
62
+
63
+
64
+
65
+ > 動作しないのですがなぜでしょうか?
66
+
67
+
68
+
69
+ なぜかを解説すると、
70
+
71
+ ブラウザがどういった順序でレンダリングするか、が関わってきます。
72
+
73
+ まず、基本は上から下に、レンダリングやソースの解析を行なっていきますが、
74
+
75
+ 基本的に、`script`要素が出現するたびに、そのソースコードの解析が始まり、
76
+
77
+ **HTMLのパースは一時中断され**ます。
78
+
79
+ つまり、質問者さんのHTML構文では、下記のような現象が起きています。
80
+
81
+
82
+
83
+ 0. 上行から解析、`div#ham`にたどり着く
84
+
85
+ 0. その要素内に`script`要素があるので、`div#ham`のパースを一時中断してスクリプトの解析が始まる
86
+
87
+ 0. `script`の構文では、`div#ham`を使用する構文があるが、**パースが中断されている**ので、当然、JS側で要素の補足ができない。
88
+
89
+ 0. 上記状態のため、当然**クリックイベントを当てることもできない**
90
+
91
+ 0. スクリプトの解析が終わり、HTMLのパースが再開される
92
+
93
+ 0. ここで`div#ham`のパースが完了する
94
+
95
+
96
+
97
+ ということで、JavaScriptで、DOMをコントロールする場合、**HTMLパースが完了してから実行する**ことが重要になります。