16
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ajaxなどで変更したDOMに対するイベント

Posted at

メモ書き程度に書いておきます。

ajaxなどで変更したDOMに対するイベントとは。

例えば以下のような時です。

$.ajax({
  url: "ex.php",
  type: "GET",
  data: {
    id: 1
  },
  success: function(data){
    $("ul").append("<li>"+data+"</li>");
  }
});

jQuery Ajaxの書き方はそれぞれあると思うので、ここでは触れません。

とても適当な例ですが、ex.phpに対してGETメソッドを使い、id=1を送っています。

その結果がsuccessdataに返ってきます。

そのdataをli要素としてulに追加している。という状態です。

この時に、ulはもともと書かれていますが、li要素はajaxでとってきてから初めてDOMに反映されます。

これをajaxなどで変更したDOMと今回はさせていただきます。

ではこのli要素をクリックしたらalert()で中身を出力したいと思います。

よくある例として

$("li").on("click",function(){
  alert($(this).text());
});

onを利用したイベントバインドですね。

ですが、このコードは先ほどのajaxなどで変更したDOMの場合動きません。

***じゃあどうしたらいいんだよ!!!***と。

こうしましょう

$("ul").on("click","li",function(){
  alert($(this).text());
});

onはul>liを監視するようになります。

これはulを見に行ってからliを探すので、見つかるというわけですね。

リファレンスにもこのように書かれています。

.on()では選択要素とセレクターがありますが、選択要素は.onメソッドが呼ばれる前にページ上に存在している必要があります。 .on()のような委任タイプのイベントの利点として、もし新しい要素が後からjavaScriptの動的な処理によって選択要素内に追加されたとしても、 セレクタにマッチしていればその新しい要素に対してもイベントハンドラが有効になります。

子要素のイベントを親要素、その親要素とどんどん繋がっていってしまうことがあります。

これをイベントバブリングと言います。

このイベントバブリングを利用した手段というわけですね!

もっと詳しく知りたい方は下のURLから参照してください。

JavaScript初級者から中級者になろう

[jQuery]イベントのバブリングって何?

16
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?