回答編集履歴

2

(コメントを受けて)追記

2021/02/22 09:56

投稿

gpsoft
gpsoft

スコア1323

test CHANGED
@@ -21,3 +21,57 @@
21
21
 
22
22
 
23
23
  同様に、768px以上になったら、クリックイベントを解除する必要がありますね。
24
+
25
+
26
+
27
+ ---
28
+
29
+ **[コメントを受けて、改修例を追加]**
30
+
31
+
32
+
33
+ 改修後の`handle()`関数は↓こんな感じになると思います。
34
+
35
+
36
+
37
+ ```javascript
38
+
39
+ function handle(mm) {
40
+
41
+ if (mm.matches) {
42
+
43
+ $(function() {
44
+
45
+ $(".menu__item").on("click", function() {
46
+
47
+ $(".submenu", this).slideToggle();
48
+
49
+ });
50
+
51
+ $(".menu__item").off("mouseenter mouseleave"); // ←これと
52
+
53
+ });
54
+
55
+ } else {
56
+
57
+ $(function() {
58
+
59
+ $('.menu__item').hover(function() {
60
+
61
+ $(".submenu:not(:animated)", this).slideDown();
62
+
63
+ }, function() {
64
+
65
+ $(".submenu", this).slideUp();
66
+
67
+ });
68
+
69
+ $(".menu__item").off("click"); // ←これ
70
+
71
+ });
72
+
73
+ }
74
+
75
+ }
76
+
77
+ ```

1

コメントを受けて補足

2021/02/22 09:56

投稿

gpsoft
gpsoft

スコア1323

test CHANGED
@@ -3,3 +3,21 @@
3
3
 
4
4
 
5
5
  たとえば、`<a class="menu__item__a" href="#">メニュー4</a>`などとすれば、ちゃんとサブメニューが開閉しましたよ。
6
+
7
+
8
+
9
+ ---
10
+
11
+ **[コメントを受けて、hoverの件などについて補足]**
12
+
13
+
14
+
15
+ 失礼しました、hoverのことはスルーしてました(私はタッチデバイスで試してたので)。
16
+
17
+
18
+
19
+ 1度でもビューポート幅が768pxを超えるとhoverハンドラが仕込まれてしまうので、その後、たとえ768px以下になったとしてもhoverイベントに反応してしまうんだと思います。768px以下になったときにhoverハンドラを解除してみたらどうでしょうか? 解除方法は `$('.menu__item').off('mouseenter mouseleave');` です(詳しくは[マニュアル(https://api.jquery.com/hover/)](https://api.jquery.com/hover/)参照)。
20
+
21
+
22
+
23
+ 同様に、768px以上になったら、クリックイベントを解除する必要がありますね。