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

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

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

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

jQuery

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

Q&A

解決済

2回答

404閲覧

【jQuery】要素をクリックするたびに特定のclassが存在するか判別したい

s_ogawa

総合スコア38

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2017/08/18 17:49

【やりたいこと】
特定の要素をクリックするたびにクラスを追加・削除を切り替えた上で、そのクラスが存在しているかを判別したい

【行ったこと】
以下の挙動を想定して、下記のコードを書きました。

トリガーとなる個別複数の要素をクリックするたびに「active」というクラスをそれぞれ追加・削除を交互に行い、合わせて「active」のクラスが1つでもページ内に存在するかどうかを判別して、ターゲットとなる要素をCSSで表示非表示を制御する

//HTML(抜粋) <span id="trigger−01">トリガー1</span> <span id="trigger−02">トリガー2</span> <div id="target">ターゲット</div> //js $("#trigger−01").on('click',function(){ $(this).toggleClass('active'); if($('.active').length){ //「active」クラスがある時 $('#target').css('display','block'); } else { //「active」クラスがない時 $('#target').css('display','none'); } }); $("#trigger−02").on('click',function(){ $(this).toggleClass('active'); if($('.active').length){ $('#target').css('display','block'); } else { $('#target').css('display','none'); } });

【結果】
最初にどちらかの要素をクリックした時は「active」クラスの判別でターゲットの要素が表示されるのですが、以降クリックした時に「active」がないのにも関わらずターゲットの要素が表示されたままになってしまう。

HTML上では「active」クラスの追加・削除は問題なく行われており、条件分岐のところをデバッグをすると必ず「active」クラスが存在するときの挙動になる。

====

以上、詳しい方ご教授いただけますと幸いです。
どうぞよろしくお願いいたします。

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

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

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

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

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

s_ogawa

2017/08/19 03:07

早速ご返答いただきありがとうございました、問題については自己解決いたしました。お手数をおかけいたしました。
guest

回答2

0

以下のコードで検証し、トリガー2トリガー1トリガー2トリガー1という順序でクリックし動作を確認しましたが、質問者さんがいうような「「active」がないのにも関わらずターゲットの要素が表示されたままになってしまう」という動作は確認できませんでした。一度、キャッシュの消去を行ってから以下のコードで挙動を確認してみていただけませんか?

HTML

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>タイトル</title> 6</head> 7<body> 8<span id="trigger−01">トリガー1</span> 9<span id="trigger−02">トリガー2</span> 10<div id="target">ターゲット</div> 11<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script> 12<script> 13 $(function () {// 読み込み時のチェックを追加 14 if ($(".active").length) { 15 $("#target").css("display", "block"); 16 } else { 17 $("#target").css("display", "none"); 18 } 19 }); 20 21 $("#trigger−01").on("click", function () { 22 $(this).toggleClass("active"); 23 if ($(".active").length) { 24 $("#target").css("display", "block"); 25 } else { 26 $("#target").css("display", "none"); 27 } 28 }); 29 30 $("#trigger−02").on("click", function () { 31 $(this).toggleClass("active"); 32 if ($(".active").length) { 33 $("#target").css("display", "block"); 34 } else { 35 $("#target").css("display", "none"); 36 } 37 }); 38</script> 39</body> 40</html>

投稿2017/08/18 19:02

編集2017/08/18 19:05
s8_chu

総合スコア14731

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

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

s_ogawa

2017/08/19 03:10

ご返答ありがとうございました、いただきましたコードでも問題なく動作が確認できました。 問題については自己解決しましたが、こちらの回答で原因に気づくことができました。 お手数をおかけいたしました。ありがとうございました。
guest

0

自己解決

うまく動作しない原因が判明しました。
ソースコードを再度確認したところ、ページ内にある別の要素で「active」のクラスを使用しており、トリガーをクリック時のオンオフにかかわらず常に「active」クラスが存在していることが原因でした。。

初歩的なミスに全く気付かずお手数をおかけいたしました。
ご回答いただきました、kei344様、s8_chu様に感謝申し上げます。
ありがとうございました。

投稿2017/08/19 03:06

s_ogawa

総合スコア38

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問