質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

1816閲覧

JavaScriptで追加されたものに対してイベントリスナーを適用させる方法

roy29

総合スコア18

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2016/12/17 05:41

コンテンツが縦並びになっているようなキュレーションサイトを作っています。

はじめに幾つかのコンテンツが表示されており、
スクロールで下に移動すると続きが表示される作りです。
これは以下のload.jsで管理しています(長くなってしまうため、端折っています)。
showContent()でコンテンツを追加しています。

load.js

JavaScript

1var loading = false; 2$(window).scroll(function() { 3 if ($(window).scrollTop() + $(window).height() + 250 >= $(document).height() ) { 4 if (loading == false) { 5 loading = true; 6 showContent(); 7 loading = false; 8 } 9 } 10});

各コンテンツにはお気に入りボタンが付いていて、クリックするとイベントリスナーで定義された動作が実行されます。これはfavorite.jsで管理しています。

favorite.js

JavaScript

1$(".favorite").click(function () { 2 $(this).toggleClass("favorite-after"); 3});

始めから表示されているコンテンツに対してはクリックイベントが実行されるのですが、load.jsで読み込まれた分に対してクリックイベントが実行されません。

コンソールを確認してもエラーは出ていません。
また、ブラウザ上で検証すると元から表示されていたコンテンツと同様にclassが記述されています。

イベントリスナーはそのコードを読み込んだ時点で表示されているものにしか適用されないのでしょうか。
ご存知の方がいましたらご回答をお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

イベントリスナーはそのコードを読み込んだ時点で表示されているものにしか適用されないのでしょうか。

仰るとおりです。

JavaScript

1//$(".favorite").click(function () { 2//↓ 3$(document).on("click", ".favorite", function () {

【参考】
jQuery 便利なonを使おう(on click) - Qiita
http://qiita.com/shizuma/items/d561f37f864c3ebb5096

jQuery の on() と off() を理解する - tacamy.blog
http://tacamy.hatenablog.com/entry/2013/03/03/213113

投稿2016/12/17 06:13

sii_side

総合スコア849

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

roy29

2016/12/17 06:38

参考リンクも紹介していただき、ありがとうございます。 勉強になりました。
guest

0

ベストアンサー

clickではなく、onを使いましょう。
リストの子要素に個別にイベントに割り当てるのではなく、その先祖に当たる要素にclickイベントを仕込みます。
そしてセレクターを指定することで、特定の子要から発火された場合のみ処理が実行されるようなことも可能です。

HTML

1<ol class="favorites"> 2 <li class="favorite"> 3 // 色々ある 4 </li> 5 ... // 以下 li.favorite の繰り返し 6</ol>

JavaScript

1$(".favorites").on("click", ".favorite", function(e){ 2 // TODO:下記のまま動作するかは不明、要調査 3 $(this).toggleClass("favorite-after"); 4});

投稿2016/12/17 06:11

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

roy29

2016/12/17 06:38

なるほど、追加されるものにイベントを設定したい時は親要素に仕込むんですね。 とてもわかりやすかったです。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問