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

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

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

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

jQuery

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

Q&A

解決済

2回答

538閲覧

addClassとremoveClassのタイミングがよくわかりません

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2018/04/20 12:59

編集2018/04/20 13:00

###目的
2つチェックしたときにclass.pair_onが付与されdisplay:block;し、他の2つがチェックされたらそれを外してdisplay:none;にする。

という機能を作りたいです。

しかしaddClassとremoveClassのタイミングがよくわかりません。

###現状
現状はremoveClassを書いているのに.pair_onが外れてくれないためdisplay:none;にならず、下図のようにdisplay:block;(水色の中の項目)が増え続けてしまいます。

イメージ説明

どのように書けば目的のように水色の項目を1つにできるでしょうか?

▼上図のサンプル
https://jsfiddle.net/tLv577fn/

▼そのコード

html

1<div class="check-wrap"> 2 <div> 3 <p>2つチェックしてください。</p> 4 </div> 5 <ul id="fluits_list"> 6 <li><input id="fluits_apple" class="check_fluits" name="check_fluits" value="apple" type="checkbox"> 7 <label for="fluits_apple" class="check_label"> 8 <span class="i apple"></span> 9 </label> 10 </li> 11 <li><input id="fluits_banana" class="check_fluits" name="check_fluits" value="banana" type="checkbox"> 12 <label for="fluits_banana" class="check_label"> 13 <span class="i banana"></span> 14 </label> 15 </li> 16 <li><input id="fluits_kiwi" class="check_fluits" name="check_fluits" value="kiwi" type="checkbox"> 17 <label for="fluits_kiwi" class="check_label"> 18 <span class="i kiwi"></span> 19 </label> 20 </li> 21 </ul> 22</div> 23 24<div class="output-wrap"> 25 <p>選択中のフツールはこちらです。</p> 26 <div> 27 <p><span id="output_name1"></span><span id="output_name2"></span></p> 28 </div> 29</div> 30 31<div class="pair-wrap"> 32 <div id="pair_none" class="fluits-widget">相性が良いのは何かな?</div> 33 <div id="pair_applebanana" class="fluits-widget pair_on">りんごの後のバナナは相性ばつぐん!</div> 34 <div id="pair_bananaapple" class="fluits-widget">バナナの後のリンゴはまぁまぁの相性。</div> 35 <div id="pair_applekiwi" class="fluits-widget">りんごの後のキウイはぼちぼちの相性。</div> 36 <div id="pair_kiwiapple" class="fluits-widget">キウイの後のリンゴはなかなかの相性。</div> 37 <div id="pair_kiwibanana" class="fluits-widget">キウイの後のバナナはほどほどの相性。</div> 38 <div id="pair_bananakiwi" class="fluits-widget">バナナの後のキウイは相性サイコー!</div> 39 <div id="pair_applekiwi" class="fluits-widget">りんごの後のキウイは相性サイテー!</div> 40 <div id="pair_kiwiapple" class="fluits-widget">キウイの後のリンゴは相性ぴったり。</div> 41</div>

javascript

1$(function(){ 2 3/************************** 4/*ピンクと黄緑の部分は完璧 5**************************/ 6 $('input[name=check_fluits]').change(function(){ 7 var clone=$(this).siblings().find('.i').clone(); 8 if($('input[name=check_fluits]:checked').length>2) { 9 $(this).prop("checked",false); 10 alert("チェックは2つまで"); 11 return false; 12 } 13 if($(this).prop('checked')){ 14 $('#output_name1,#output_name2').filter(function(){ 15 return $(this).html()==""; 16 }).eq(0).html(clone); 17 }else{ 18 console.log($.map(clone.prop('classList'),function(x){return "."+x;}).join("")); 19 $('#output_name1,#output_name2').has($.map(clone.prop('classList'),function(x){return "."+x;}).join("")).html(""); 20 } 21 }); 22 $('input[name=check_fluits]').prop('checked',false).filter('[value=apple],[value=banana]').prop('checked',true).trigger("change"); 23 24/************************** 25/*水色の部分がちょっとあやしい 26**************************/ 27 $('input[name=check_fluits]').change(function(){ 28 29 //チェックがないときは「#paie_none」だけを表示 30 if($('#fluits_list :checked').length == 0){ 31 $('#pair_none').fadeIn(); 32 } 33 34 var pair1 = $('#output_name1 .i').get(0).className.split(" ")[1]; 35 var pair2 = $('#output_name2 .i').get(0).className.split(" ")[1]; 36 var pair3 = ('pair_' + pair1 + pair2); 37 if($('#fluits_list :checked').length == 2){ 38 $('#' + pair3).addClass('pair_on'); 39 40 //こうすれば水色の相性についての表示を1つにできると思ったのですが… 41 $('.fluits-widget:first-of-type').removeClass('pair_on'); 42 43 } 44 }); 45 46}); 47

css

1/******************* 2/*チェックエリア(ピンク) 3********************/ 4.check-wrap { 5 background: #ffcccc; 6} 7#fluits_list { 8 list-style: none; 9 padding: 0; 10} 11.apple:before { 12 content:'りんご'; 13} 14.banana:before { 15 content:'バナナ'; 16} 17.kiwi:before { 18 content:'キウイ'; 19} 20.grape:before { 21 content:'ぶどう'; 22} 23 24/******************* 25/*出力エリア(黄緑) 26********************/ 27.output-wrap { 28 background: #d8ffb2; 29} 30 31/******************* 32/*愛称エリア(水色) 33********************/ 34.pair-wrap { 35 background: #c4fdff; 36} 37.fluits-widget { 38 display: none; 39} 40.pair_on { 41 display: block; 42}

長くなってしまってすみません。どなたかご教示頂けませんでしょうか(>_<)
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

javascript

1 $('input[name=check_fluits]').change(function(){ 2 // この部分追加しました。 3 $('.fluits-widget').each(function(index,dom){ 4 $(dom).removeClass('pair_on'); 5 }); 6 7 //チェックがないときは「#paie_none」だけを表示 8 if($('#fluits_list :checked').length == 0){ 9 $('#pair_none').fadeIn(); 10 } 11 12 var pair1 = $('#output_name1 .i').get(0).className.split(" ")[1]; 13 var pair2 = $('#output_name2 .i').get(0).className.split(" ")[1]; 14 var pair3 = ('pair_' + pair1 + pair2); 15 if($('#fluits_list :checked').length == 2){ 16 $('#' + pair3).addClass('pair_on'); 17 //こうすれば水色の相性についての表示を1つにできると思ったのですが… 18 //$('.fluits-widget:first-of-type').removeClass('pair_on'); 19 //↑これだと.fluits-widget最初のものしか見なくなってしまいます。 20 //さらにここに追加すると、常に2つチェックされている必要があります。 21 } 22 });

こうでしょうかね?

投稿2018/04/20 13:39

icegreen

総合スコア96

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

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

退会済みユーザー

退会済みユーザー

2018/04/20 14:19

こんばんは。ご回答ありがとうございます。さらにコメントまでつけて頂き感謝です。書く位置はなかなか難しいですね。 ご提示のようにしてほぼ理想の形になりました。どうもありがとうございます! …あと、夜分に大変恐縮なのですが、、 //チェックがないときは「#paie_none」だけを表示 の部分については、どのように書けばいいのでしょうか? これ、質問文に書いていなかったのですが、この機能にも不備がありました。すみません。(ご提示の形ですと、チェックがあるときにもこれが表示されてしまいまして、改めてお聞かせいただけませんでしょうか?) お手すきの折に教えて頂ければ幸いでございます。
icegreen

2018/04/20 14:33

if($('#fluits_list input:checked').length == 0) $('#pair_none').fadeIn(); 1行にまとめていますが、$("#fluits_list :checked")ではなく、inputを付けて明確にしたらいいかと思います。
退会済みユーザー

退会済みユーザー

2018/04/20 14:48

たびたびありがとうございます。 …すみません。できないようすです。(>_<) https://jsfiddle.net/tLv577fn/9/
icegreen

2018/04/20 14:54

inputの後ろにスペースがあるからじゃないでしょうか?
退会済みユーザー

退会済みユーザー

2018/04/20 15:22 編集

たびたび失礼しました。どうもありがとうございます。
guest

0

JavaScript

1 2 $('input[name=check_fluits]').change(function(){ 3 4 //↓追加 5 $('.fluits-widget').removeClass('pair_on'); 6 7 //チェックがないときは「#paie_none」だけを表示 8 if($('#fluits_list :checked').length == 0){ 9 $('#pair_none').fadeIn(); 10 } 11 12 var pair1 = $('#output_name1 .i').get(0).className.split(" ")[1]; 13 var pair2 = $('#output_name2 .i').get(0).className.split(" ")[1]; 14 var pair3 = ('pair_' + pair1 + pair2); 15 if($('#fluits_list :checked').length == 2){ 16 $('#' + pair3).addClass('pair_on'); 17 18 //こうすれば水色の相性についての表示を1つにできると思ったのですが… 19 $('.fluits-widget:first-of-type').removeClass('pair_on'); 20 21 } 22 }); 23

こうですか?

投稿2018/04/20 13:18

tekka

総合スコア514

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問