回答編集履歴
2
コメントへの返信
test
CHANGED
@@ -11,3 +11,67 @@
|
|
11
11
|
|
12
12
|
|
13
13
|
この問題を解決するにはいくつか方法がありますが、一番手っ取り早い方法はIタグの`history.back()`を`history.go(-2)`に変更することです。この変更により、`history.pushState`によって追加された空の履歴の一つ前にジャンプすることができます。
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
EDIT ソースコードの追記場所
|
18
|
+
|
19
|
+
`$(function(){})`の内部であれば、基本的にどこでも構いません。
|
20
|
+
|
21
|
+
```js
|
22
|
+
|
23
|
+
$(function(){
|
24
|
+
|
25
|
+
// ここか //
|
26
|
+
|
27
|
+
history.pushState(null, null, null);
|
28
|
+
|
29
|
+
$(window).on("popstate", function (event) {
|
30
|
+
|
31
|
+
history.pushState(null, null, null);
|
32
|
+
|
33
|
+
$('.modal-wrapper').fadeIn();
|
34
|
+
|
35
|
+
});
|
36
|
+
|
37
|
+
// ここに記述 //
|
38
|
+
|
39
|
+
});
|
40
|
+
|
41
|
+
```
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
基本的に、Head内にソースを書いたJavaScriptはHTMLの描写より早く行われます。JavaScriptの中にHTMLの要素を呼び出すコードを記入する際、この順番を意識しなければいけません。なぜなら、HTMLの描写がされていない場合、`.close-modal`という要素は存在しないからです。
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
jQueryでは、`$()`の中にコードを渡すと、そのコードはHTMLの描写が完了した後に呼び出されます。
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
ちなみに、発展的な内容ですがjQueryを使わずともHTMLの描写が終わった時に呼び出すこともできます。
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
```js
|
58
|
+
|
59
|
+
// document.addEventListener(XX, YY)
|
60
|
+
|
61
|
+
// ページにXXというイベントが発生した時にYYという関数を実行します
|
62
|
+
|
63
|
+
document.addEventListener('DOMContentLoaded', function (event) {
|
64
|
+
|
65
|
+
// ここに記述 //
|
66
|
+
|
67
|
+
})
|
68
|
+
|
69
|
+
```
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
XXには様々なものを入れることができます。これは`jQuery.on()`の中に入れるものと同じで、`click`だとか`change`だとかも入れることができます。
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
JavaScriptではイベントという概念が重要になってきますので、ぜひ勉強してみてください。
|
1
文章をよりわかりやすくしました。
test
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
-
戻るボタンを押した時と同じく、
|
1
|
+
戻るボタンを押した時と同じく、`history.back()`する時にも`popstate`が発火するため、戻る動作をブロックするコード`history.pushState`が実行されているのが原因です。
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
+
イベントについてもう少し掘り下げてみましょう。
|
6
|
+
|
5
|
-
|
7
|
+
ブラウザの戻るボタンを押した時、`popstate`イベントが発生します。`history.pushState`により、空の履歴が追加されるため、ページは戻らず、モーダルを表示しています。ここまでは想定通りだと思います。
|
6
8
|
|
7
9
|
しかし、表示したモーダルの中のIタグで、`history.back()`をする時にも、`popstate`イベントが発生します。発生したイベントにより、さらにもう一度空の履歴が追加され、ページは戻りません。こうして無限ループに陥ります。
|
8
10
|
|