回答編集履歴
2
拡張子に関して言及
test
CHANGED
@@ -20,7 +20,9 @@
|
|
20
20
|
|
21
21
|
<!-- javascriptの読み込み ここに移動 </body>の直前に -->
|
22
22
|
|
23
|
+
<!-- そして、JavaScriptファイルの拡張子は、.jsです。 -->
|
24
|
+
|
23
|
-
<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
なぜ動作しなかったかを解説を追記
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パースが完了してから実行する**ことが重要になります。
|