[解決済み】ダイナミックコンテンツでイベントハンドラが動作しない【重複あり
質問
あるタグAをクリックすると、別のタグBが追加され、クリック時にアクションBが実行されます。つまり、タグBをクリックすると、アクションBが実行されるわけです。しかし
.on
メソッドは、動的に作成されたタグ B に対して動作していないようです。
タグAのhtmlとjqueryは以下の通りです。
<a id="address" class="add_address btn btn-inverse btn-medium pull-right push-top">Add Shipping address</a>
$('.add_address').click(function(){
//Add another <a>
$(document).append('<a id="address" class="pull-right update btn btn-inverse btn-medium push-top">Update</a>');
})
タグBがクリックされると、何らかのアクションBが実行される。私のjqueryは以下の通りです。
$('.update').on('click',function(){
//action B
});
私は、クラス ".update" を持ついくつかの非ダイナミックコンテンツを持っています。そのため
.on()
のメソッドは、非ダイナミックコンテンツでは問題なく動作しますが、ダイナミックコンテンツでは動作しません。
ダイナミックコンテンツに対応させるにはどうしたらよいですか?
どのように解決するのですか?
セレクタパラメータを追加しないと、イベントはデリゲートではなく直接バインドされ、その要素がすでに存在する場合にのみ機能します(したがって、動的に読み込まれるコンテンツでは機能しません)。
参照 http://api.jquery.com/on/#direct-and-delegated-events
コードを次のように変更します。
$(document.body).on('click', '.update' ,function(){
jQueryセットはイベントを受け取り、引数として与えられたセレクタにマッチする要素にイベントを委譲します。つまり
live
jQuery set 要素は、コードを実行するときに存在しなければなりません。
この回答が注目されたので、2つの補足をします。
1) 可能であれば、イベントリスナーを最も正確な要素にバインドすることで、無駄なイベント処理を避けることができます。
つまり、もしあなたが、クラス
b
の既存の要素に、id
a
を使用しないでください。
$(document.body).on('click', '#a .b', function(){
を使用しますが
$('#a').on('click', '.b', function(){
2)
id付きの要素を追加するときは、2回追加していないかどうか注意してください。同じidを持つ2つの要素を持つことはHTMLでは違法であるだけでなく、多くのことを壊してしまいます。たとえば、セレクタ
"#c"
は、このidを持つ1つの要素のみを取得します。
関連
-
[解決済み】jQuery: outer html() [重複]。
-
[解決済み] TypeError: $.ajax(...) is not a function?
-
[解決済み] asp.net mvcのHtml.BeginForm()にIDプロパティを追加する方法は?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] 動的に生成された要素にイベントバインディングを行うか?
-
[解決済み] jQueryのイベントハンドラを削除する最良の方法?
-
[解決済み] イベントを発生させた要素のIDを取得する
-
[解決済み] ドロップダウンメニューが内部でクリックされたときに閉じないようにする
-
[解決済み] [Solved] ユーザーの入力が終わるまで、.keyup()ハンドラを遅延させる方法は?
-
[解決済み】Twitter bootstrapのリモートモーダルでは、毎回同じコンテンツが表示される
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】jQuery.addClassが動作しない。
-
[解決済み] Bootstrap のカルーセルがスライドしない
-
[解決済み] フォーム送信のjQueryが動作しない
-
[解決済み] jQueryがfadeOutで動作しない
-
[解決済み] ファイルをホストせずにホットリンクできるjQueryのバージョンはどこかにあるのでしょうか?
-
[解決済み] 2つの画像を切り替えるにはどうすればよいですか
-
[解決済み] jQueryで背景画像をアニメーションで変化させる
-
[解決済み] フォーム送信のjQueryが動作しない
-
[解決済み] jqueryでアンカークリックをシミュレートするにはどうしたらいいですか?
-
[解決済み] 動的に生成された要素にイベントバインディングを行うか?