質問するログイン新規登録

回答編集履歴

6

propagation

2020/01/09 11:37

投稿

FKM
FKM

スコア3675

answer CHANGED
@@ -23,7 +23,7 @@
23
23
  $('.modal-close').blur(function(){$(this).focus();$(this).select();});
24
24
  $('.modal-close').on('keydown', function(event) {
25
25
  if((event.which === 9)||(event.which === 18)||(event.which === 116)||(event.which === 117)||(event.which === 119)||(event.which === 122)||(event.which === 123)) {
26
- //ここを消さないとイベントがバブリングされない。
26
+ //ここを消さないとイベントがバブリングされない。event.stopPropagation()でも行けるようです
27
27
  //return false;
28
28
  }
29
29
  });

5

保障は

2020/01/09 11:37

投稿

FKM
FKM

スコア3675

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  完全には再現できなかったのですが、イベントをバブリング(伝播)させるようにしないと駄目なので、`return false;`を実行するとイベントがそこで止まってしまいます。
2
2
 
3
- また、modal-closeのイベントを実行するためには、cloneメソッドと同じように、バブリングの際に用いる記述に変更しま
3
+ また、modal-closeのイベントを実行するためには、cloneメソッドと同じように、バブリングの際に用いる記述に変更した方がいいかもしれせん
4
4
 
5
5
  ```modalwindow.js
6
6
  $(function(){
@@ -28,7 +28,7 @@
28
28
  }
29
29
  });
30
30
  });
31
- //イベントバブリングするためには、第2引数を使う
31
+ //イベントバブリングするためには、第2引数を使う方が安定する。
32
32
  $("document").on('click',".modal-close",function(){
33
33
  //alert(0);
34
34
  $('.modal-close').blur(function(){

4

alertはなし

2020/01/09 11:29

投稿

FKM
FKM

スコア3675

answer CHANGED
@@ -33,7 +33,6 @@
33
33
  //alert(0);
34
34
  $('.modal-close').blur(function(){
35
35
  setTimeout(function(){
36
- alert(lastFocusedElement);
37
36
  window.focus();$(lastFocusedElement).focus();
38
37
  }, 0);
39
38
  $('#modalwindow_01').stop().animate({scrollTop:winScrollTop}, 100);

3

文字の訂正

2020/01/09 11:23

投稿

FKM
FKM

スコア3675

answer CHANGED
@@ -1,6 +1,7 @@
1
- 完全には再現できなかったのですが、イベントをバブリング(伝播)させるようにしないと駄目なので、return false;を実行するとイベントが止まってしまいます。
1
+ 完全には再現できなかったのですが、イベントをバブリング(伝播)させるようにしないと駄目なので、`return false;`を実行するとイベントがそこで止まってしまいます。
2
2
 
3
- また、一度見えていなかったmodal-closeのイベントを実行するためには、cloneメソッドと同じように、イベントバブリングに対し、書き方工夫が必要です。
3
+ また、modal-closeのイベントを実行するためには、cloneメソッドと同じように、バブリングの際用いる記述変更します。
4
+
4
5
  ```modalwindow.js
5
6
  $(function(){
6
7
  if($('.modal').hasClass('open')){
@@ -41,4 +42,6 @@
41
42
  //return false; ieの場合はこっちもコメントアウトしないと、次に引き継がない
42
43
  });
43
44
 
44
- ```
45
+ ```
46
+
47
+ これで、いちおうはFirefoxとIE11でもタブキーのみで開閉できるようです。

2

バブリングのfalse

2020/01/09 11:22

投稿

FKM
FKM

スコア3675

answer CHANGED
@@ -1,4 +1,4 @@
1
- 完全には再現できなかったのですが、イベントを伝播させるようにしないと駄目なので、最初のreturn false;を実行するとイベントが止まってしまいます。
1
+ 完全には再現できなかったのですが、イベントをバブリング(伝播させるようにしないと駄目なので、return false;を実行するとイベントが止まってしまいます。
2
2
 
3
3
  また、一度見えていなかったmodal-closeのイベントを実行するためには、cloneメソッドと同じように、イベントバブリングに対し、書き方に工夫が必要です。
4
4
  ```modalwindow.js
@@ -38,7 +38,7 @@
38
38
  $('#modalwindow_01').stop().animate({scrollTop:winScrollTop}, 100);
39
39
  });
40
40
  });
41
- return false;
41
+ //return false; ieの場合はこっちもコメントアウトしないと、次に引き継がない
42
42
  });
43
43
 
44
44
  ```

1

書き直し

2020/01/09 11:19

投稿

FKM
FKM

スコア3675

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