回答編集履歴

6

propagation

2020/01/09 11:37

投稿

FKM
FKM

スコア3640

test CHANGED
@@ -48,7 +48,7 @@
48
48
 
49
49
  if((event.which === 9)||(event.which === 18)||(event.which === 116)||(event.which === 117)||(event.which === 119)||(event.which === 122)||(event.which === 123)) {
50
50
 
51
- //ここを消さないとイベントがバブリングされない。
51
+ //ここを消さないとイベントがバブリングされない。event.stopPropagation()でも行けるようです
52
52
 
53
53
  //return false;
54
54
 

5

保障は

2020/01/09 11:37

投稿

FKM
FKM

スコア3640

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- また、modal-closeのイベントを実行するためには、cloneメソッドと同じように、バブリングの際に用いる記述に変更しま
5
+ また、modal-closeのイベントを実行するためには、cloneメソッドと同じように、バブリングの際に用いる記述に変更した方がいいかもしれせん
6
6
 
7
7
 
8
8
 
@@ -58,7 +58,7 @@
58
58
 
59
59
  });
60
60
 
61
- //イベントバブリングするためには、第2引数を使う
61
+ //イベントバブリングするためには、第2引数を使う方が安定する。
62
62
 
63
63
  $("document").on('click',".modal-close",function(){
64
64
 

4

alertはなし

2020/01/09 11:29

投稿

FKM
FKM

スコア3640

test CHANGED
@@ -68,8 +68,6 @@
68
68
 
69
69
  setTimeout(function(){
70
70
 
71
- alert(lastFocusedElement);
72
-
73
71
  window.focus();$(lastFocusedElement).focus();
74
72
 
75
73
  }, 0);

3

文字の訂正

2020/01/09 11:23

投稿

FKM
FKM

スコア3640

test CHANGED
@@ -1,8 +1,10 @@
1
- 完全には再現できなかったのですが、イベントをバブリング(伝播)させるようにしないと駄目なので、return false;を実行するとイベントが止まってしまいます。
1
+ 完全には再現できなかったのですが、イベントをバブリング(伝播)させるようにしないと駄目なので、`return false;`を実行するとイベントがそこで止まってしまいます。
2
2
 
3
3
 
4
4
 
5
- また、一度見えていなかったmodal-closeのイベントを実行するためには、cloneメソッドと同じように、イベントバブリングに、書き方に工夫が必要です。
5
+ また、modal-closeのイベントを実行するためには、cloneメソッドと同じように、バブリングの際用いる記述に変更す。
6
+
7
+
6
8
 
7
9
  ```modalwindow.js
8
10
 
@@ -85,3 +87,7 @@
85
87
 
86
88
 
87
89
  ```
90
+
91
+
92
+
93
+ これで、いちおうはFirefoxとIE11でもタブキーのみで開閉できるようです。

2

バブリングのfalse

2020/01/09 11:22

投稿

FKM
FKM

スコア3640

test CHANGED
@@ -1,4 +1,4 @@
1
- 完全には再現できなかったのですが、イベントを伝播させるようにしないと駄目なので、最初のreturn false;を実行するとイベントが止まってしまいます。
1
+ 完全には再現できなかったのですが、イベントをバブリング(伝播させるようにしないと駄目なので、return false;を実行するとイベントが止まってしまいます。
2
2
 
3
3
 
4
4
 
@@ -78,7 +78,7 @@
78
78
 
79
79
  });
80
80
 
81
- return false;
81
+ //return false; ieの場合はこっちもコメントアウトしないと、次に引き継がない
82
82
 
83
83
  });
84
84
 

1

書き直し

2020/01/09 11:19

投稿

FKM
FKM

スコア3640

test CHANGED
@@ -1,9 +1,87 @@
1
- 使用るjQueryのバージョンが古く、そのために取得できていない可能性が高いです。
1
+ 完全には再現できなかったのですが、イベントを伝播させるようにと駄目なので、最初のreturn false;を実行するとイベ止まっします。
2
2
 
3
3
 
4
4
 
5
- フォーカス枠とか動作を完全再現できなかったの仮想環境でテストしたころjQUERY3.2.1のAPIなら問題なく取得できたのに対し、jQUERY1.12.4だとwebkitエンジン(Chrome、Opera)しか取得でませんした
5
+ また、一度見えていなかったmodal-closeイベントを実行るためにはcloneメソッド同じようにイベントバブリングに対し、方に工夫が必要
6
+
7
+ ```modalwindow.js
8
+
9
+ $(function(){
10
+
11
+ if($('.modal').hasClass('open')){
12
+
13
+ $('.modal').removeClass('open');
14
+
15
+ }else{
16
+
17
+ $('.modal').addClass('open');
18
+
19
+ }
20
+
21
+ var winScrollTop;
22
+
23
+ var lastFocusedElement;
24
+
25
+ $('.modal-open').on('click',function(){
26
+
27
+ //スクロール位置を取得
28
+
29
+ winScrollTop = $('#modalwindow_01').scrollTop();
30
+
31
+ //フォーカス位置を取得
32
+
33
+ lastFocusedElement = document.activeElement;
34
+
35
+ //alert(lastFocusedElement);
36
+
37
+ setTimeout(function(){
38
+
39
+ $('.modal-close').focus();
40
+
41
+ }, 1001);
42
+
43
+ $('.modal-close').blur(function(){$(this).focus();$(this).select();});
44
+
45
+ $('.modal-close').on('keydown', function(event) {
46
+
47
+ if((event.which === 9)||(event.which === 18)||(event.which === 116)||(event.which === 117)||(event.which === 119)||(event.which === 122)||(event.which === 123)) {
48
+
49
+ //ここを消さないとイベントがバブリングされない。
50
+
51
+ //return false;
52
+
53
+ }
54
+
55
+ });
56
+
57
+ });
58
+
59
+ //イベントバブリングするためには、第2引数を使う
60
+
61
+ $("document").on('click',".modal-close",function(){
62
+
63
+ //alert(0);
64
+
65
+ $('.modal-close').blur(function(){
66
+
67
+ setTimeout(function(){
68
+
69
+ alert(lastFocusedElement);
70
+
71
+ window.focus();$(lastFocusedElement).focus();
72
+
73
+ }, 0);
74
+
75
+ $('#modalwindow_01').stop().animate({scrollTop:winScrollTop}, 100);
76
+
77
+ });
78
+
79
+ });
80
+
81
+ return false;
82
+
83
+ });
6
84
 
7
85
 
8
86
 
9
- 最短の解決策は使用しているjQueryのバージョンを1.12ではなく、最新の3.x以上にしてみることです。
87
+ ```