後から追加された要素へのイベント設定
後から追加された要素へ普通にfunction設定しても動かない
JavaScriptによって後から追加された要素要素に対して、
$(セレクタ).on('click', function( ) { 処理 } )
としても動かない。
これは、ビューのローディング時には、その要素が存在しなかったため、イベントが設定できなかったからである。
どうすれば動くか
下記のように、.on( ) メソッドの第一引数にイベント名、第二引数にセレクタを記述すると動く。
$(document).on("click", "セレクタ", function( ) { 処理 } )
この書き方では、click イベント自体はセレクタに対してではなく、document に対して設定されている。
なぜ動くようになるのか
on( ) メソッドの第二引数にセレクタを設定しているため、document 以下でセレクタをクリックした場合に実行されるイベントとなり、後から追加されたセレクタに対してもclick イベントが実行されるようになる。
つまり、ここではdocumentがクリックされたらイベントが発生している。指定したセレクタ以外をクリックしてもイベントが発生している。
ただ、発生元が指定したセレクタでないため、function は実行されない。
大体の場合、イベントを指定したいセレクタは、ある一定の範囲内にあるはずなので、出来るだけ狭い範囲で指定してあげたほうが、パフォーマンスの観点から見て望ましい。