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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

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

JavaScript

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

jQuery

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

Q&A

解決済

4回答

3655閲覧

【jQuery】タブで二つの要素を切替表示

k.r.

総合スコア30

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

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

JavaScript

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

jQuery

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

1グッド

2クリップ

投稿2016/07/11 10:38

###前提・実現したいこと
jQueryで、if構文、.hide().show()メソッドを使用し、タブ表示切替を実装したいですが、
想定の動きをしません。
.addclass()でcssの切替や、if構文以外の方法で実装も視野に入れてはいるのですが、
理解促進のため下記でなぜ動かないのか知りたいです。
JS自体始めたばかりです。

###発生している問題・エラーメッセージ
1回目の$('abc').clickでは想定通りいくのですが、
2回目の表示タブを戻す際の$('.Jsyllabary').clickが動作しません。

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

html

1<ul class="list__Jsyllabary"> 2 <li>あいう<li/> 3</ul> 4<ul class="list__abc"> 5 <li>ABC<li/> 6</ul> 7<div> 8 <span class="Jsyllabary"></span> | <span class="abc">A</span></p> 9</div> 10

JavaScript

1var Jsyllabary = true; 2$(function(){ 3 if ( Jsyllabary === true ){ 4 $('.list__abc').hide(); 5 $('.abc').click(function(){ 6 $('.list__abc').show(); 7 $('.list__Jsyllabary').hide(); 8 Jsyllabary = false; 9 }); 10 } else { 11 $('.Jsyllabary').click(function(){ 12 $('.list__Jsyllabary').show(); 13 $('.list__abc').hide(); 14 Jsyllabary = true; 15 }); 16 } 17});

###補足情報(言語/FW/ツール等のバージョンなど)
jQuery 3.0.0
HTML5

mondaminZ👍を押しています

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

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

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

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

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

guest

回答4

0

理解促進のためのコードとのことですので、動作するコードの提示は避けます。

$(function(){...})の中のコードは、ページがロードされた時に実行されます。ページの作り方にもよりますが、大抵は1度だけしか実行されません。
ですので、else文のコードはおそらく実行されないでしょう。
分かりにくいようでしたら、開発者ツールなどでステップ実行してみてはいかがでしょう?

コードをステップ実行する - 開発ツール | MDN

投稿2016/07/11 11:42

Lhankor_Mhy

総合スコア36115

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

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

0

ベストアンサー

flag(true||false)で、処理を分けたいのでしょうか?

でしたら、jqueryオブジェクトは、まとめた方が良いかもですね
以下に例文示しますので、ご参考にしてみてください。

質問者さんのソースへのコメント

JavaScript

1var Jsyllabary = true; 2/* 3ここだと、グローバル変数宣言なので、 4オブジェクトの中にいれて、スコープを持たせた方が、安全性が高いと言えます 5*/ 6$(function(){ 7/* 8$(function(){...}}は、DOM解析(HTMLそのもの読み込み)後に 9実行したい処理を書く場所って感じです。利用する時は、どのタイミングで使いたいのか、 10意識してみると良いです。 11※これは、jquery(instance)へバインドされるので、スコープも変わりますから、注意です。 12 たとえば、thisとかとか...(^^; 13*/ 14 if ( Jsyllabary === true ){ 15 $('.list__abc').hide(); 16 $('.abc').click(function(){ 17 $('.list__abc').show(); 18 $('.list__Jsyllabary').hide(); 19/* 20$('.list__abc') 2122var $abcList = $('.list__abc'); 23イベントは複数回呼ばれるので、毎回jqueryセレクタでオブジェクトを 24生成するよりは、一度、変数代入した方が良いです. 25*/ 26 Jsyllabary = false; 27 }); 28 } else { 29 $('.Jsyllabary').click(function(){ 30 $('.list__Jsyllabary').show(); 31 $('.list__abc').hide(); 32 Jsyllabary = true; 33 }); 34 } 35});

以下、参考に!

HTML

1<ul class="listItems list__Jsyllabary"> 2 <li>あいう<li/> 3</ul> 4<ul class="listItems list__abc"> 5 <li>ABC<li/> 6</ul> 7<div> 8 <span class="listTab Jsyllabary">あ</span> | <span class="listTab abc">A</span></p> 9</div>

まず、HTMLが編集できるようであれば、上記のようにすると良いと思います。
classでjqueryオブジェクトを生成する場合、そのclassを持っている要素(DOM)をすべて、
まとめてくれます。
それを利用していきましょう
※単一(まとまった要素の中でもそいつだけ)が欲しいって時の対処も合わせて書くので、参考にw

足したのは、それぞれの対象にclass[listItems, listTab]を一つ足しました。

JavaScript

1var JS_TAB_ACTION = { 2 set : function(){ 3 this.tabClass = 'listTab'; 4 this.itemClass= 'listItems'; 5 this.Jsyllabary = false; 6 this.setup() 7 }, 8 setup : function(){ 9 var _this = this; 10 var $tabs = $('.' + this.tabClass); 11 var $items = $('.' + this.itemClass); 12 $tabs.on('click', function(e){ 13 var $this = $(this); 14 var index = $tabs.index(this); 15 var $target = $items.eq(index); 16 /*これで単一要素が取れるます。 17 $('.class').eq(index)でラップされた要素から、 18 indexにマッチするやつだけ、returnします。*/ 19 $items.hide(); 20 $target.show(); 21 _this.Jsyllabary = (index === 1) ? true : false; 22 }); 23 } 24}; 25$(function(){ 26 JS_TAB_ACTION.set(); 27});

上記で質問者さんの望む挙動ができると思います。
ただ、留意があります。
私の書いたソースでは、制限があり、
1つめにタブの表示順(タグの書かれている順番)と表示したいアイテムの順番がリンクしている必要があります。
個別にイベントを張って、処理を分ける必要があれば、申しつけてください。
頑張って書いてみますw

やっていることは、至ってJavaScriptのMDNで推挙している方法で、
オブジェクトを作り、処理をその中へ入れて、呼び出し式で、実行するようにしている
これが、上記の概念・抽象です。

具体的な説明をすると、
var JS_TAB_ACTIONで、オブジェクトを作成
set(){...},setup(){...}をその中に入れる...イメージはハッシュ(連想配列)が良いと思います。
画面loadが終わったら、set()を呼び出し、イベントを発付する
こんなところです。

MDN:(サイト:https://developer.mozilla.org/ja/docs/Web/JavaScript)

分からなかったら、分かるまで、付き合いますから、どんどん聞いて下さいな(・ω・)

投稿2016/07/13 04:26

tama_yn0815

総合スコア143

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

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

0

if文の中にイベントリスナーを入れてるので、上記の条件だとelse中の文が実行されず、従って二つ目のイベントリスナーが登録されません。
これで動きます。

$(function(){ var Jsyllabary = true; $('.list__abc').hide(); //初期処理にわざわざhide()を使うより、CSSでdisplay:none;にしておく方がいいと思います $('.abc').click(function(){ $('.list__abc').show(); $('.list__Jsyllabary').hide(); Jsyllabary = false; }); $('.Jsyllabary').click(function(){ $('.list__Jsyllabary').show(); $('.list__abc').hide(); Jsyllabary = true; }); });

投稿2016/07/11 23:51

編集2016/07/11 23:55
NS-DOS

総合スコア110

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

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

0

function抜きでやってみたらいかがでしょう?

javascript

1$(document).ready(function(){ 2 $('.list__Jsyllabary').show(); 3 $('.list__abc').hide(); 4 $('.abc').click(function(){ 5 $('.list__abc').show(); 6 $('.list__Jsyllabary').hide(); 7 }); 8 $('.Jsyllabary').click(function(){ 9 $('.list__Jsyllabary').show(); 10 $('.list__abc').hide(); 11 }); 12}); 13

やはり、[ $(document).ready(function() ] が必要ではないでしょうか。

投稿2016/07/11 22:20

編集2016/07/12 08:39
vsmorse

総合スコア68

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問