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

回答編集履歴

1

追加質問への回答追加

2017/05/18 08:19

投稿

rok6
rok6

スコア241

answer CHANGED
@@ -11,4 +11,50 @@
11
11
  });
12
12
  ```
13
13
  子カテゴリを持たない一番上の階層のカテゴリはちゃんとリンク機能します。
14
- 多分、もっと良い方法は無数に存在するかと思いますが・・・。
14
+ 多分、もっと良い方法は無数に存在するかと思いますが・・・。
15
+
16
+ ---
17
+
18
+ 以下追記
19
+
20
+ 【質問1】について
21
+
22
+ `closest('li')`は親カテゴリの li タグを返しています。
23
+ そこからチェーンメソッドで繋ぎ、`children('a')`で親カテゴリの子要素である a タグを指定、
24
+ 親カテゴリの子要素の a タグにクリックイベントを実装する、という流れになっています。
25
+
26
+ 【質問2】について
27
+
28
+ これは迂闊でした・・・。
29
+ ```javascript
30
+ .on('click', function(e){
31
+ e.preventDefault();
32
+ });
33
+ ```
34
+ これでいいかと思います。
35
+ ※リスト開閉のイベントは li 要素につけてください。
36
+
37
+ 【補足】
38
+
39
+ ```
40
+ <div class="parent">
41
+ <div class="child"></div>
42
+ </div>
43
+ ```
44
+ 子要素で発生したイベントは親要素にも伝播します。
45
+ 上記では、child クラスの要素をクリックすると、
46
+ parent クラスのクリックイベントも発生します。
47
+
48
+ そして、イベント無効の手段として3つあります。
49
+
50
+ `preventDefault();`
51
+ その要素のイベントを無効にします。
52
+ 親要素のイベントは発生します。
53
+
54
+ `stopPropagation();`
55
+ 親要素のイベントを無効にします(イベントの伝播を止める)。
56
+ 子要素のイベントは発生します。
57
+
58
+ `return false;`
59
+ 以降の処理を全て無効にします。
60
+ 親要素のイベントも発生しません。