回答編集履歴

1

追記

2019/02/12 16:17

投稿

kszk311
kszk311

スコア3404

test CHANGED
@@ -9,3 +9,75 @@
9
9
 
10
10
 
11
11
  以上の二点でとりあえず問題となるところは解決するかと
12
+
13
+
14
+
15
+ ### 追記
16
+
17
+ インタラクティブ・コンテンツの中にインタラクティブ・コンテンツがあって、jQueryでclickイベント設定するとか、普通は設定しないので、
18
+
19
+ 予期しない動作だから二度イベントが呼ばれるとかじゃないかなと思います。
20
+
21
+ [インタラクティブ・コンテンツについて](https://www.tagindex.com/html5/basic/interactive.html)
22
+
23
+
24
+
25
+ 下記のように、`preventDefault()`を使うことで、3パターンどれでも解決はするんですが
26
+
27
+ ```js
28
+
29
+ $(document).on("click","label", function(e){
30
+
31
+ e.preventDefault();
32
+
33
+ ```
34
+
35
+
36
+
37
+ **そもそもこの処理なら、`button`で実装するのが良いと思います。**
38
+
39
+ ```html
40
+
41
+ <button class="open" id="submit" value="a">
42
+
43
+ <span id="now">りんご</span>
44
+
45
+ </button>
46
+
47
+ ```
48
+
49
+
50
+
51
+ ```js
52
+
53
+ $(document).on("click","button", function(e){
54
+
55
+ if( $(this).hasClass('open') ){
56
+
57
+ $(this).closest('div').find('ul').slideDown();
58
+
59
+ $(this).removeClass('open');
60
+
61
+ }else{
62
+
63
+ $(this).closest('div').find('ul').slideUp();
64
+
65
+ $(this).addClass('open');
66
+
67
+ }
68
+
69
+ });
70
+
71
+ ```
72
+
73
+
74
+
75
+ `on()`イベントよりは`click()`イベントで良いと思いますが、そこは触れないでおきます。
76
+
77
+
78
+
79
+ ### コメントに対する回答
80
+
81
+ `<div><p><span></span></p></div>`は、どれもインタラクティブコンテンツではないので、JSで設置したイベントを処理しているだけです。
82
+
83
+ そのため、一回しか処理されません。