タイトル回収からいきますと、「悲しい時」このネタを記憶している方はもう多くないのかと思われます。
そう、「いつもここから」というコンビ芸人のネタです。
それはさておき、やっぱり
ページロード後に生成されたDOM要素にJavaScriptで当てているはずのイベントが効かないときって悲しいですよね。
もっと悲しいのは、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() {
・・・(処理内容)
});
このように記述する!
以上です!