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

回答編集履歴

2

書式の改善

2019/02/26 01:39

投稿

so87
so87

スコア789

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

1

作例を希望されたので

2019/02/26 01:39

投稿

so87
so87

スコア789

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