回答編集履歴

2

書式の改善

2019/02/26 01:39

投稿

so87
so87

スコア764

test CHANGED
@@ -5,6 +5,8 @@
5
5
  追記します。
6
6
 
7
7
  > 直接イベントをキャプチャする
8
+
9
+
8
10
 
9
11
  とは、動的に追加する要素に直接イベントリスナーを仕込むという意味です。
10
12
 

1

作例を希望されたので

2019/02/26 01:39

投稿

so87
so87

スコア764

test CHANGED
@@ -1 +1,73 @@
1
1
  scrollやresizeなど一部のイベントはバブリングしないので、`$(document).on(イベント、セレクタ、function(){})`ではスクロールイベントを拾えません。直接イベントをキャプチャする必要があります。
2
+
3
+
4
+
5
+ 追記します。
6
+
7
+ > 直接イベントをキャプチャする
8
+
9
+ とは、動的に追加する要素に直接イベントリスナーを仕込むという意味です。
10
+
11
+
12
+
13
+ 作例1
14
+
15
+ ```js
16
+
17
+ $(document).on("click","button", function()
18
+
19
+ {
20
+
21
+ /** 追加するスクロール要素にscrollのイベントリスナーを仕込んだ、jQueryオブジェクトを用意 */
22
+
23
+ var $main = $('<main><div><p>Hello</p></div></main>').on("scroll", function(evt){
24
+
25
+ console.log(evt);
26
+
27
+ });
28
+
29
+ /** 用意したjQueryオブジェクトをDOMに追加する */
30
+
31
+ $(this).after($main);
32
+
33
+ });
34
+
35
+ ```
36
+
37
+
38
+
39
+ 作例2
40
+
41
+ ```js
42
+
43
+ $(document).on("click","button", function()
44
+
45
+ {
46
+
47
+ /** DOMに追加する */
48
+
49
+ $(this).after('<main><div><p>Hello</p></div></main>');
50
+
51
+
52
+
53
+ /** 追加してからセレクタで追加した要素を探し出し、scrollのイベントリスナーを仕込む */
54
+
55
+ $('main').on("scroll", function(evt){
56
+
57
+ console.log(evt);
58
+
59
+ });
60
+
61
+ });
62
+
63
+ ```
64
+
65
+
66
+
67
+ maimaimeさんのコードに近い記述は作例2ですが、
68
+
69
+ 作例1のほうがコードにつながりが出て、意図が伝わりやすいかなと思います。
70
+
71
+ イベントリスナーを仕込むタイミングはDOMへの追加前でも後でも問題ありません。
72
+
73
+ ポイントはイベントバブリングされないので、どの要素に対してなのか明確にすることです。