回答編集履歴

2

検証追記

2016/07/19 10:02

投稿

orange0190
orange0190

スコア1698

test CHANGED
@@ -137,3 +137,13 @@
137
137
  ```
138
138
 
139
139
  上記は検証していませんので、動かないかもしれません。(これから検証します)
140
+
141
+
142
+
143
+ 検証結果
144
+
145
+ ---
146
+
147
+ [レスポンシブ時にPC/SPで、アコーディオンメニューの挙動を変えたい。検証](https://jsfiddle.net/5tgsarqr/)
148
+
149
+ 検証した結果、動作するかと思います。

1

追記

2016/07/19 10:02

投稿

orange0190
orange0190

スコア1698

test CHANGED
@@ -1,6 +1,6 @@
1
1
  以下のようにしてみてはいかがでしょうか。
2
2
 
3
- ```PHP
3
+ ```javascript
4
4
 
5
5
  // アコーディオンメニュー
6
6
 
@@ -55,3 +55,85 @@
55
55
  ```
56
56
 
57
57
  `.hover()`は`.on()`とかと同じようにイベントを設定しているだけですので、元のコードでは`over_flg`は更新されません。
58
+
59
+
60
+
61
+ 追記
62
+
63
+ ---
64
+
65
+ 私なら以下のようにするかと思います。
66
+
67
+ ```javascript
68
+
69
+ $(function(){
70
+
71
+
72
+
73
+ // 各イベントで利用するためにこの位置で定義
74
+
75
+ var over_flg = true;
76
+
77
+
78
+
79
+ $(document).on("click", ".click-btn", function(ev){
80
+
81
+ // イベントの伝播を防ぐ
82
+
83
+ ev.stopPropagation();
84
+
85
+
86
+
87
+ // ev.target がイベントの起こった要素
88
+
89
+ var l = $( ev.target ).parents( '#globalMenu' ).length;
90
+
91
+
92
+
93
+ if ( l > 0 ) { // メニュー内のイベントか判定
94
+
95
+ // ここではPC・SPは関係ないのでクラスの付与・除去のみを行う
96
+
97
+ $( '.child-list' ).toggleClass('open01');
98
+
99
+ }
100
+
101
+ });
102
+
103
+
104
+
105
+ // ここでhoverイベントを設定(PCのみ動作する)
106
+
107
+ $('.product-child .click-btn,.child-list').hover(function(){
108
+
109
+ over_flg = true;
110
+
111
+ }, function(){
112
+
113
+ over_flg = false;
114
+
115
+ });
116
+
117
+
118
+
119
+ // メニュー領域外をクリックしたらメニューを閉じる
120
+
121
+ $('body').click(function() {
122
+
123
+ if(window.innerWidth > 768){ // ウィンドウサイズからPC・SPを判定
124
+
125
+ if (over_flg == false) {
126
+
127
+ $('.child-list').removeClass('open01');
128
+
129
+ }
130
+
131
+ }
132
+
133
+ });
134
+
135
+ });
136
+
137
+ ```
138
+
139
+ 上記は検証していませんので、動かないかもしれません。(これから検証します)