悲しい時ー! jQueryでページロード後に生成されたDOM要素へのイベントが効かないときー!

stressed black male entrepreneur working on laptop in park jQuery
Photo by Ketut Subiyanto on Pexels.com
jQuery

タイトル回収からいきますと、「悲しい時」このネタを記憶している方はもう多くないのかと思われます。

そう、「いつもここから」というコンビ芸人のネタです。

それはさておき、やっぱり

jQueryでページロード後に生成されたDOM要素へのイベントが効かないときって悲しいですよね。

はい、今回はその原因によくある事象をピックアップします。

なぜ効かない?それは、ページロード後にjQueryで生成されたHTMLコードだから!

そうなんです!cssが適用されたあとにjQueryがコードを後出ししてくるから、スタイルが当たらないんでぇぇぇす!!

$('#button').on('click', function() {
//実行処理を記述
});

これが実行されない!

$('#button').on('click', function() {
  window.alert("クリックされました");
});

ってやってもやっぱりだめ!つまりはid=”button”で指定しているHTMLタグが、反応しない!

これを回避するハック的とも言える対処法はこちらです!

引数にセレクタを指定するとうまくいく

例えば指定したいボタンのセレクタが”id=”obj1″の場合・・・

$(document).on('click', '#obj1', function(){
alert("効いた!");
});

上のスクリプトと何が違うのでしょう?

それは、初期に対象にしているセレクタを$(document)にしていること。

これを指定していると、ページロード時に存在していないセレクタ(ここでは”#obj1″)でも、パラメータの方に指定していればjQueryの実行時に改めて探しにいってくれるようです。

これが、ユーザのボタンイベントなどによるEventListenerでない場合、つまりページロード後の、さらにjQueryのHTML生成後に自動実行したい、というときは、

$(window).on('load', '#obj1', function() {
・・・(処理内容)
});

このように記述する!

以上です!

タイトルとURLをコピーしました