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

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

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

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

Q&A

解決済

1回答

1106閲覧

jsで動的要素に対してのclickイベント設定について

akiiro_

総合スコア19

JavaScript

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

0グッド

0クリップ

投稿2018/10/08 02:42

編集2018/10/08 05:50

前提・実現したいこと

動的要素に対しての正しいclickイベント設定

<li>以下が動的要素で<ul>は静的です。 動的要素に対してのイベント設定なのでonメソッドを使用して第二引数に動的要素を指定しています。 <span>をclickする事でイベントが発生した<span>とその親の<li>だけを削除したいです。

発生している問題・エラーメッセージ

<ul>をclickした時に<ul>にもイベントが発生してしまい消えてしまう。

該当のソースコード

HTML

1<!--動的要素生成後--> 2<ul class="js-myself-tag-list"> 3 <li class="profile-edit-add-tag-myself-list-item"> 4 <span class="profile-edit-add-tag-myself-list-item-delete"> 5 </span> 6 </li> 7</ul>

JavaScript

1ソースコード 2$(function () { 3 var $myselfTagList = $('.js-myself-tag-list'); 4 var $myselfTagListItemDelete = $myselfTagListItem.find('.profile-edit-add-tag-myself-list-item-delete'); 5 6 $myselfTagList.on('click', $myselfTagListItemDelete, function (e) { 7 var $eMyselfTagListItem = $(e.target).parent(); 8 9 $eMyselfTagListItem.remove(); 10 e.stopPropagation(); 11 }); 12});

試したこと

https://qiita.com/negi/items/6ec0d3cedba499eac81a
https://qiita.com/sansaisoba/items/7099e63c4badb3b51b74
の記事を参考にして第二引数に動的要素を設定しました。

バブリングだと思いhttps://qiita.com/madobon/items/9a93ea830f093b1dca4f
の記事を参考にしてe.stopPropagation();を試しました。

補足情報(FW/ツールのバージョンなど)

他に動的要素に対してのイベントの設定の仕方や<ul>にイベント発生させない方法があれば教えて欲しいです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

これで動くと思います

html

1<ul class="js-myself-tag-list"> 2 <li class="profile-edit-add-tag-myself-list-item"> 3 <span class="profile-edit-add-tag-myself-list-item-delete"> 4 </span> 5 </li> 6<ul></ul>の間違いです。

javascript

1$(function () { 2 var $myselfTagList = $('.js-myself-tag-list'); 3 4 $myselfTagList.on('click', '.profile-edit-add-tag-myself-list-item-delete', function (e) { 5 $(e.target).parent().remove(); 6 }); 7});

投稿2018/10/08 05:07

kaba

総合スコア314

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

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

akiiro_

2018/10/08 05:57 編集

すみません、HTMLのコードコピペしてないのでここに書き込みした時に間違えてしまったみたいです。 全てコピペし直しました。 変わらずjsは動くのですが親までイベントが発生してしまうという状況です????
akiiro_

2018/10/08 06:01

大変申し訳ございませんでした。 無事解決しました! 本当にありがとうございます!
akiiro_

2018/10/08 06:09

大変、恐縮なのですが解決した理由が知りたいのです。 <li>にfindメソッドを使用して<span>を探しにいってしまった為、<ul>まで参照してしまったのが原因だったのでしょうか?
kaba

2018/10/08 06:52

APIを使用するときはAPIリファレンスを確認しましょう。 $('セレクタ').on()の第2引数はセレクタ文字列です。http://api.jquery.com/on/ jQueryオブジェクトを渡していることが間違いです。
akiiro_

2018/10/08 06:59 編集

回答ありがとうございます。 わかりました。習慣づけるようにします。 そうだったのですね、知りませんでした... 以後気をつけます。貴重なお時間ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問