[解決済み] jQueryで動的なHTML要素にイベントを添付するにはどうすればよいですか?[重複しています]。
質問
を持つすべての要素にイベントハンドラをアタッチする jQuery コードがあるとします。
.myclass
.
例えば、こんな感じです。
$(function(){
$(".myclass").click( function() {
// do something
});
});
そして、私のHTMLは次のようになります。
<a class="myclass" href="#">test1</a>
<a class="myclass" href="#">test2</a>
<a class="myclass" href="#">test3</a>
これは問題なく動作します。
しかし、もし
.myclass
要素がページに書き込まれるのは、将来のある時点のことです。
例えば
<a id="anchor1" href="#">create link dynamically</a>
<script type="text/javascript">
$(function(){
$("#anchor1").click( function() {
$("#anchor1").append('<a class="myclass" href="#">test4</a>');
});
});
</script>
この場合
test4
をクリックすると、リンクが作成されます。
a#anchor1
.
は
test4
のリンクには
click()
ハンドラに関連付けられています。
class="myclass"
.
基本的には
click()
ハンドラを一度実行すれば、ページロード時に存在するコンテンツと、後で
AJAX / DHTML
. この問題を解決するにはどうしたらよいでしょうか?
解決方法は?
後のjQueryリリースの変更を反映させるために、新しい回答を追加しています。.live()メソッドは、jQuery 1.7で非推奨となりました。
から http://api.jquery.com/live/
jQuery 1.7より、.live()メソッドは非推奨となりました。イベントハンドラをアタッチするには、.on()を使用してください。古いバージョンのjQueryのユーザーは、.live()よりも.delegate()を優先して使用する必要があります。
jQuery 1.7+ では、親要素にイベントハンドラをアタッチするには .on() を使用し、引数として 'myclass' と組み合わせたセレクタを渡すことができます。
だから、その代わりに
$(".myclass").click( function() {
// do something
});
書くことができます...
$('body').on('click', 'a.myclass', function() {
// do something
});
これは、ボディに 'myclass' があるすべての a タグで、すでに存在するか、後で動的に追加されるかにかかわらず、動作します。
この例では、より近い静的な周囲のタグがないため、bodyタグが使用されていますが、.onメソッドの呼び出しが発生したときに存在する親タグであれば、どのようなものでも機能します。例えば、動的な要素が追加されるリストのulタグは、次のようになります。
$('ul').on('click', 'li', function() {
alert( $(this).text() );
});
ulタグが存在する限り、これは動作します(li要素はまだ存在する必要はありません)。
関連
-
[解決済み] Error : 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] どのラジオボタンが選択されているかをjQueryで知るにはどうしたらよいですか?
-
[解決済み] jQueryでページを更新するにはどうすればよいですか?
-
[解決済み] jQueryで要素にスクロールする
-
[解決済み] jQueryで入力を無効化/有効化する?
-
[解決済み] jQueryで複数のクラスを持つ要素を選択するにはどうすればよいですか?
-
[解決済み] jQueryで現在のURLを取得する?
-
[解決済み】jQueryでチェックボックスがチェックされているかどうかを確認するにはどうすればよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
JavaScriptの関数この指摘の問題を説明
-
Vueがechartsのtooltipにクリックイベントを追加するケーススタディ
-
Vue Element-uiは、アイコンを追加するためのツリーコントロールノードを詳細に実装しています。
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
Vueでルートネスティングを実装する例
-
[解決済み] 配列の結合時に未定義のプロパティ 'push' を読み込むことができない
-
[解決済み】GETできない / Nodejsエラー
-
[解決済み】ExpressJS - throw er Unhandled errorイベント
-
モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory, scandir 'D:\.... \node_modules
-
[解決済み] 動的に生成された要素にイベントバインディングを行うか?