[解決済み] jQuery clone()でon()を使ってもイベントバインディングがクローンされない
質問
私は、モバイルWebアプリケーションで使用するために、一連のカスタムjQueryイベントを作成しました。これらは素晴らしく動作し、テスト済みです。しかし、理解するのに苦労する小さな問題に遭遇しました。
私は
.clone()
を使用しています。この要素はボタンを含んでいます。ボタンにはカスタムイベントのいくつかがバインドされています (イベントは
.on()
を使用してバインドされています)、しかし。残念ながら、私がjQueryの
.clone()
を使用すると、バインディングは保存されず、再度追加する必要があります。
どなたか、この問題に遭遇したことがある方、潜在的な回避策をご存知の方はいらっしゃいますか?私は
.on()
を使用すると、現在または将来的に存在する要素のバインディングを維持することになっていると思いましたか?
どのように解決するのですか?
私は、このオーバーロードを使用するべきだと思います。 .clone() メソッドを使うべきだと思います。
$element.clone(true, true);
clone( [withDataAndEvents] [, deepWithDataAndEvents] )
withDataAndEvents : イベントハンドラやデータを要素と一緒にコピーするかどうかを示すブール値。デフォルトはfalseです。
deepWithDataAndEvents : クローンされた要素のすべての子要素のイベントハンドラとデータをコピーすべきかどうかを示すブール値です。デフォルトでは、この値は第1引数の値(デフォルトはfalse)と一致します。
注意点
.on()
は実際にイベントをターゲットにバインドするのではなく、デリゲートしている要素にバインドすることに注意してください。ですから、もしあなたが
$('#container').on('click', '.button', ...);
イベントは実際には
#container
. をクリックすると
.button
要素が発生すると、バブルアップして
#container
要素にバブリングされる。 イベントのトリガーとなった要素は
.on()
のセレクタパラメータで評価され、一致すればイベントハンドラが実行されます。これがイベントデリゲーションの仕組みです。
要素#containerをクローンする場合、イベントと
.on()
で作ったバインディングを保持するために、イベントとデータでディープクローンする必要があります。
を使っている場合は必要ないでしょう。
.on()
の親に対して
#container
.
関連
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] jQueryでページを更新するにはどうすればよいですか?
-
[解決済み] jQueryで要素にスクロールする
-
[解決済み] jQueryで入力を無効化/有効化する?
-
[解決済み] jQueryで複数のクラスを持つ要素を選択するにはどうすればよいですか?
-
[解決済み] jQueryで現在のURLを取得する?
-
[解決済み] jQueryでフォームデータをJavaScriptオブジェクトに変換する
-
[解決済み] JavaScript / jQuery のイベントバインディングを Firebug などでデバッグするには?
-
[解決済み】チェックボックスがチェックされているかどうかをjQueryで確認する。
-
[解決済み] JavaScript で `throw` の後に `return` をする必要がありますか?
最新
-
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でdivの要素がオーバーフローしていないかチェックする
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] なぜJavaScriptでは!{}[true]がtrueに評価されるのですか?
-
[解決済み] Google maps API V3 - 同一地点に複数のマーカーを設置する。
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] Javascript 空の配列の削減
-
[解決済み] Chromeの拡張機能開発にWebStormを使用するにはどうすればよいですか?
-
[解決済み] Reactメモを使うべきではない場合とは?
-
[解決済み] javascriptのキャンバスで画像をリサイズする (スムーズ)
-
[解決済み] これは純関数ですか?