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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

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

Q&A

解決済

3回答

807閲覧

jQueryでクリックイベントが続けられないし一緒に動いてしまう。

satoko

総合スコア17

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

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

0グッド

0クリップ

投稿2017/07/27 06:19

編集2017/07/27 06:24

###前提・実現したいこと
複数liリストの部分をクリックすると右側のspanで囲んだ記号が「+」の時に「-」に、「-」の部分が「+」なるようjQueryでイベントを設定したいです。
しかし、イベントを仕込むと
・複数のliのspanが同時に動く
・「+」から「-」には変更になるが、「-」から「+」にはならない
という風に思うように動きません。

コードは以下のように書きました。

###該当のソースコード

html

1 <ul> 2 <li class="btn">クリックすると変わる<span class="toggle">+</span></li> 3 <li class="btn">クリックすると変わる<span class="toggle">+</span></li> 4 </ul> 5

js

1$(function(){ 2 $(".btn").on("click",function(){ 3 if($(".toggle").text() == "-"){ 4 $(".toggle").text("+"); 5 } else { 6 $(".toggle").text("-"); 7 } 8 }); 9}) 10

###試したこと
.togleをthisにしたりelse以下のelse ifで「"+"の時に"-"に変更する」など変更してみました。

お願い致します。

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

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

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

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

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

guest

回答3

0

ベストアンサー

クリックイベント内で$(".toggle")とした場合、クラス属性にtoggleを持つ全ての要素が対象となるため、全ての「+」が「-」に置き換わる状態です。

以下のようにして、クリックされた要素の子要素のみが書き換わるようにしてください

javascript

1$(function(){ 2 $(".btn").on("click",function() { 3 var $toggle = $(this).find('.toggle'); 4 if($toggle.text() == "-"){ 5 $toggle.text("+"); 6 } else { 7 $toggle.text("-"); 8 } 9 }); 10});

投稿2017/07/27 06:32

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

satoko

2017/07/27 06:42

ありがとうございます! 試したところ、自分の思う通りに動きました。 他の回答者様のコードを試しましたが、一番迅速かつスマートなコードだったのでベストアンサーにさせていただきました。 また、thisの書き方もクラスにつなげて書いていいことは初めて知りました。 回答してくださったかたありがとうございます。
退会済みユーザー

退会済みユーザー

2017/07/27 09:30

念のためですが、「this」ではなく「$(this)」として、jQueryオブジェクト化していることに注意してください。
guest

0

$(".toggle")という指定だと、ドキュメントに存在するすべてのtoggleクラスが対象になるので、連動してしまうのです。
クリックされたボタンの子要素であるtoggleクラスを対象にしたいのですから、find()を利用しましょう。

javascript

1$(function(){ 2 $(".btn").on("click",function(){ 3 var tog = $(this).find(".toggle"); 4 if(tog.text() == "-"){ 5 tog.text("+"); 6 } else { 7 tog.text("-"); 8 } 9 }); 10})

投稿2017/07/27 06:30

zohnam

総合スコア1441

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

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

0

$(".toggle")だとドキュメント内にあるすべてのtoggleクラスを持つ要素のjQueryオブジェクトが取得されてしまうため、正しく動作していないのだと思います。
イベントを発火した要素内にあるもののみ取得するには、$(".toggle",this)のようにします。

javascript

1$(function(){ 2 $(".btn").on("click",function(){ 3 if($(".toggle",this).text() == "-"){ 4 $(".toggle",this).text("+"); 5 } else { 6 $(".toggle",this).text("-"); 7 } 8 }); 9})

投稿2017/07/27 06:30

ku__ra__ge

総合スコア4524

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問