[解決済み] jQuery 動的に追加されたHTML要素にonclickイベントをバインドする方法 [duplicate]
2022-05-12 14:32:32
質問
jQuery で動的に挿入する要素に onclick イベントをバインドしたい。
しかし、それはバインドされた関数を実行することはありません。この例がなぜ動かないのか、どうすれば正しく実行されるのか、ご指摘いただければ幸いです。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="da" lang="da">
<head>
<title>test of click binding</title>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
jQuery(function(){
close_link = $('<a class="" href="#">Click here to see an alert</a>');
close_link.bind("click", function(){
alert('hello from binded function call');
//do stuff here...
});
$('.add_to_this').append(close_link);
});
</script>
</head>
<body>
<h1 >Test of click binding</h1>
<p>problem: to bind a click event to an element I append via JQuery.</p>
<div class="add_to_this">
<p>The link is created, then added here below:</p>
</div>
<div class="add_to_this">
<p>Another is added here below:</p>
</div>
</body>
</html>
EDIT: メソッドが挿入される2つの要素を含むように、例を編集しました。
その場合
alert()
の呼び出しは決して実行されません。(コメントでそれを指摘してくれた@Daffに感謝します)
どのように解決するのですか?
最初の問題は、複数の要素を持つ jQuery セットに対して append を呼び出すと、append する要素のクローンがそれぞれ作成されるため、付属のイベントオブザーバが失われることです。
別の方法として、各要素のリンクを作成することができます。
function handler() { alert('hello'); }
$('.add_to_this').append(function() {
return $('<a>Click here</a>').click(handler);
})
もう一つの潜在的な問題は、要素がDOMに追加される前にイベントオブザーバーがアタッチされることかもしれません。これが何かというと、動作が未確定とみなされる可能性があるかと思います。 より堅実なアプローチとしては、おそらく
function handler() { alert('hello'); }
$('.add_to_this').each(function() {
var link = $('<a>Click here</a>');
$(this).append(link);
link.click(handler);
});
関連
-
vue3レスポンシブ対応のためのsetup+ref+reactive
-
[解決済み] 要素外でのクリックを検出するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] 2つのJavaScriptオブジェクトのプロパティを動的にマージするにはどうすればよいですか?
-
[解決済み] どのラジオボタンが選択されているかをjQueryで知るにはどうしたらよいですか?
-
[解決済み] jQueryでページを更新するにはどうすればよいですか?
-
[解決済み] jQueryで要素にスクロールする
-
[解決済み] jQueryで複数のクラスを持つ要素を選択するにはどうすればよいですか?
-
[解決済み] 動的に生成された要素にイベントバインディングを行うか?
-
[解決済み】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におけるマクロタスクとミクロタスクの詳細
-
HTML+CSS+JavaScriptで簡単な三目並べゲームを作成する。
-
Javascript Bootstrapのグリッドシステム、ナビゲーションバー、ローテーションの説明
-
VUEグローバルフィルターの概念と留意点、基本的な使い方
-
[解決済み】最大呼び出しスタックサイズ超過エラー
-
[解決済み】Node.js getaddrinfo ENOTFOUND
-
[解決済み】React - TypeError: 未定義のプロパティ 'props' を読み取ることができない。
-
[解決済み】JavaScriptエラー(Uncaught SyntaxError: Unexpected end of input)
-
フロントエンド非同期(アシンク)ソリューション(全ソリューション)
-
[解決済み] 動的に生成された要素にイベントバインディングを行うか?