オジー
- WordPress歴8年
- 副業でデザイン/開発を受託→法人化
- WordPressで会社HPをオリジナルテーマで作成
- 主軸はデザイン、たまにフロントエンドのコードも書きます
- 事業会社/受託会社 両方経験あり
オジー
jQueryを使用していると.click()
で手軽にクリックイベントを設定することができますが、.append()
などで後から追加したDOM要素に.click()
を指定しても反応しないので、その対処法を今回ご紹介します。
$('.js-clickBtn').click(function(){
$('.demo_wrap').append('<div class="demo_click_item">Click Me</div>');
});
$('.demo_click_item').click(function(){
alert('clicked');
});
$('.js-clickAfBtn').on('click',function(){
$('.demo_af_wrap').append('<div class="demo_af_click_item">Click Me</div>');
});
$('.demo_af_wrap').on('click','.demo_af_click_item',function(){
alert('clicked');
});
冒頭で説明した通り、jQueryで要素を指定するときに、$('.demo_click_item').click()
と指定していると、後から追加された.demo_click_item
にはクリックイベントを追加されません。(対策前がそのコードです)
対策後では何が違うかというと、まず.click()
ではなく.on()
を使用しています。どちらも同じクリックイベントを追加するコードですがonの方がclickより汎用性が高く使いやすいので.click()
を使用している人は.on()
を使用するようにしましょう。(jQuery ver 1.7から使用可能、clickとonの違いについては別記事で紹介します)
そして、対策後のコードを見ていただければわかると思いますが、$('.demo_wrap').on('click','.demo_af_click_item',function(){});
という記述になっています。
これは、.demo_wrap
要素(親要素)に対してイベントを設定することで間接的に.demo_af_click_item
(子要素)にイベントを設定しています。.demo_wrap
は最初からある要素なので、そこにイベントを追加することであとから追加した要素に対してもイベントが発生するようになっています。ですので.demo_wrap
は最初からある要素でなければなりません。
後から追加する要素に対してクリックイベントを設定する場合は、そのクリックする要素の親要素に対して.on()
でイベントを設定しましょう。また、その他の場合でも.click()
ではなく.on()
を使うようにしていきましょう。
では。
この記事が気に入ったら
フォローしてね!