[解決済み] 動的に生成された要素にイベントバインディングを行うか?
質問
ページ上のすべてのセレクトボックスに対してループ処理を行い、セレクトボックスに対して
.hover
イベントで、その幅を少し調整します。
mouse on/off
.
これはページレディで発生し、問題なく動作します。
問題は、最初のループの後にAjaxやDOM経由で追加したセレクトボックスには、イベントがバインドされないことです。
このプラグインを発見しました( jQuery Live クエリプラグイン しかし、プラグインで私のページに別の5kを追加する前に、私は誰かがこれを行う方法を知っているかどうかを確認したい、jQueryを直接または他のオプションのいずれかを使用します。
どのように解決するのですか?
jQuery 1.7時点
を使用する必要があります。
jQuery.fn.on
をセレクタパラメータで埋めてください。
$(staticAncestors).on(eventName, dynamicChild, function() {});
説明
これはイベントデリゲーションと呼ばれ、次のように動作します。イベントは、静的な親 (
staticAncestors
) を処理する必要があります。この jQuery ハンドラは、この要素または子孫要素のいずれかでイベントがトリガーされるたびに起動されます。このハンドラは、イベントが発生した要素がセレクタ (
dynamicChild
). 一致した場合、カスタムハンドラ関数が実行されます。
これより前
を使用することが推奨されていました。
live()
:
$(selector).live( eventName, function(){} );
しかし
live()
は1.7で非推奨となり、代わりに
on()
そして、1.9で完全に削除されました。また
live()
というシグネチャがあります。
$(selector).live( eventName, function(){} );
... は、次のように置き換えることができます。
on()
の署名が必要です。
$(document).on( eventName, selector, function(){} );
例えば、あなたのページがクラス名
dosomething
にイベントをバインドするとします。
すでに存在する親
(ここが問題の核心で、動的コンテンツにバインドするのではなく、既存の何かにバインドする必要があります) これは、(そして最も簡単なオプションは)
document
. ただし、次のことを念頭に置いてください。
document
は、最も効率的なオプションではないかもしれません
.
$(document).on('mouseover mouseout', '.dosomething', function(){
// what you want to happen when mouseover and mouseout
// occurs on elements that match '.dosomething'
});
イベントがバインドされた時点で存在する親であれば、どのようなものでもよい。例えば
$('.buttons').on('click', 'button', function(){
// do something here
});
に適用されます。
<div class="buttons">
<!-- <button>s that are generated dynamically and added here -->
</div>
関連
-
VUEグローバルフィルターの概念と留意点、基本的な使い方
-
JavaScriptのgetElementById、getElementsByTagNam、getElementsByClassNameの違いと使い方
-
[解決済み] 2つのJavaScriptオブジェクトのプロパティを動的にマージするにはどうすればよいですか?
-
[解決済み] JSONPとは何か、なぜ作られたのか?
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] JavaScriptで配列の先頭に新しい配列要素を追加するにはどうすればよいですか?
-
[解決済み] JavaScriptやデバッグでDOMノード上のイベントリスナーを見つけるには?
-
[解決済み] JavaScript / jQuery のイベントバインディングを Firebug などでデバッグするには?
-
[解決済み] jQueryの複数要素の同一クリックイベント
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
vueネットワークリクエストソリューション ネイティブネットワークリクエストとjsネットワークリクエストライブラリ
-
vueが定義するプライベートフィルタと基本的な使い方
-
[解決済み】GETできない / Nodejsエラー
-
[解決済み】ExpressJS - throw er Unhandled errorイベント
-
[解決済み] Jqueryボタンのclick()関数が動作しない【重複】について
-
[解決済み] jQueryで動的なHTML要素にイベントを添付するにはどうすればよいですか?[重複しています]。
-
[解決済み] 動的に生成された要素でクリックイベントが動作しない [duplicate]
-
[解決済み】ダイナミックコンテンツでイベントハンドラが動作しない【重複あり
-
[解決済み] DOMにまだ追加されていないJQueryオブジェクトにクリックイベントをアタッチする [重複]。
-
[解決済み] jQuery 動的に追加されたHTML要素にonclickイベントをバインドする方法 [duplicate]