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

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

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

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

JavaScript

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

17834閲覧

別ページから飛んで来たとき、タブを切り替えて表示させたい

退会済みユーザー

退会済みユーザー

総合スコア0

HTML5

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

JavaScript

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

1クリップ

投稿2017/06/13 13:58

編集2017/06/14 13:36

###別ページから飛んで来たときに、タブを切り替えて表示させたい
クラス「navi_wrap」をタブとして、
タブをクリックすると、クラス「box_wrap」に指定の内容を表示させる。
いわゆるタブの切り替えを実装。

1ページのみなら、これで完結なのですが、
別のページからリンクでとんできた際に、タブを切り替えて表示させたい。
と思い参考ページになるページを見ながら、記述してみましたが、うまく実装できません。
どこに不備があるのか分からず、行き詰まってます。
お助けを!

●参考ページ
http://irohacross.net/2015/02/jquery_tab.html

###タブの切り替え
1ページ内で完結させる、タブの切り替えの実装は、以下通りにできました。

HTML

1<!-- タブ --> 2<ul class="navi_wrap clearfix"> 3 <li class="tab01 active">メニュー01</li> 4 <li class="tab02">メニュー02</li> 5 <li class="tab03">メニュー03</li> 6</ul> 7<!-- 内容 --> 8<div class="box_wrap"> 9 <div id="box01" class="box_text"> 10 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト<br>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト<br>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p></div> 11 <div id="box02" class="box_text"> 12 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 13 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p></div> 14 <div id="box03" class="box_text"> 15 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 16 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 17 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p> 18 <p>テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト</p></div> 19</div> 20

css

1/*タブ*/ 2ul.navi_wrap{ } 3ul.navi_wrap li{ 4 float: left; 5 background: #ccc; 6 border: 1px solid #000; 7 padding: 5px; 8 text-align: center; 9} 10ul.navi_wrap li.active{ 11 font-weight: bold; 12 background: #000; 13 color: #fff; 14} 15 16/*内容*/ 17.box_wrap{ 18 width: 500px; 19 height: 150px; 20 border: 1px solid #000; 21 overflow-x: hidden; 22 overflow-y: auto; 23} 24.box_wrap .box_text{ 25 padding: 5px 10px; 26 display: none; 27} 28#box01{background: #9BFF90; display: block;} 29#box02{background: #FB9F60;} 30#box03{background: #56F5FD;} 31.box_wrap p{margin-bottom: 10px;}

javascript

1$(function() { 2 $('ul.navi_wrap li').click(function() { 3 //クリックされたタブの位置 4 var index = $('ul.navi_wrap li').index(this); 5 6 //コンテンツをすべて非表示 7 $('.box_text').css('display','none'); 8 //指定内容のみ表示 9 $('.box_text').eq(index).fadeIn(); 10 11 //タブをすべてoff 12 $('ul.navi_wrap li').removeClass('active'); 13 //選択したタブのみon 14 $(this).addClass('active'); 15 }); 16});

###別ページからリンクしてきた場合
タブの切り替えがあるページと同じ階層に、
リンクボタンを実装したページを作成。

HTML

1<ul> 2 <li><a href="index.html#box01">メニュー1にリンク</a></li> 3 <li><a href="index.html#box02">メニュー2にリンク</a></li> 4 <li><a href="index.html#box03">メニュー3にリンク</a></li> 5</ul>

このままボタンをおしても、ページが切り替わるだけで、タブが切り替わってくれない。

ので、タブの切り替えがあるページのJavaScriptを
参考ページを元に追加記述。

●参考ページ
http://irohacross.net/2015/02/jquery_tab.html

javascript

1$(function() { 2 //#以下を取得 3 var hash = location.hash ; 4 //[#box~]であるか確認 5 hash = (hash.match(/^#box\d+$/) || [])[0]; 6 7 if($(hash).length){ 8 //[#box~]である場合、#より後を取得 9 var tabname = hash.slice(1) ; 10 } else{ 11 //[#box~]でない場合、「box01」を表示 12 var tabname = "box01" ; 13 } 14 //コンテンツを一度すべて非表示 15 $('.box_text').css('display','none'); 16 //一度タブについているクラスactiveを削除 17 $('.navi_wrap li').removeClass('active'); 18 19 var tabno = $('ul.navi_wrap li#' + tabname).index(); 20 21 //クリックされたタブと同じ順番のコンテンツを表示します。 22 $('.box_text').eq(tabno).fadeIn(); 23 //クリックされたタブのみにクラスactiveをつけます。 24 $('ul.navi_wrap li').eq(tabno).addClass('active'); 25});

参考ページ通りなら、
上記の記述で別ページから飛んできても、指定したタブに切り替わって表示されるはず、、、

なのですが
表示が切り替わないだけでなく
「#box03」が選択された状態で表示される。

どこを修正すれば、
指定通りにタブが切り替わってくれるでしょうか?

###追加記述
念のため、読み込んでいるファイルを記載しておきます。

■CSS
common.css------
/* ================================================== /
/
http://meyerweb.com/eric/tools/css/reset/
v2.0 | 20110126
License: none (public domain)
*/
----------以下略

■JavaScript
jquery-1.9.1.min.js----------
/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license
//@ sourceMappingURL=jquery.min.map
*/
----------以下略

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

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

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

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

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

guest

回答2

0

なかなか惜しい感じになっていますね。

var tabno = $('ul.navi_wrap li#' + tabname).index();

変数tabnameにはタブ名(tabxx)ではなくボックス名(boxxx)が入っています。
よって、

var tabno = $('.box_wrap div#' + tabname).index();

と変更するか、タブ名(tabxx)を指定するように変更するかのどちらかを行います。

if($(hash).length){

ここに$()はいらないです。


動く動かないと関係ありませんが、読み込み時と、タブクリック時で、同じ処理をしています。
読み込み時のハッシュからタブを特定し、$(tab).click()でクリックイベントを飛ばしてやれば、行数を減らせます。

投稿2017/06/14 00:23

編集2017/06/14 00:35
moredeep

総合スコア1507

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

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

退会済みユーザー

退会済みユーザー

2017/06/14 13:46

moredeepさん コメントありがとうございます。 ご指摘をもらった①と②を下記のように修正しましたが、思うように動いてくれませんでした。 ①----- 以下の部分を var tabno = $('ul.navi_wrap li#' + tabname).index(); 以下に修正 var tabno = $('.box_wrap div#' + tabname).index(); ---------- ②----- 以下の部分を if($(hash).length){ 以下に修正 if(hash.length){ ---------- ③については、タブの切り替えができてから、まとめ直してみます。 アドバイスありがとうございます。 ないとは思いますが、他に読み込んでいるファイルのせいかな? と思ったので、読み込んでいるファイルを、追加で記述しています。
moredeep

2017/06/15 00:06

追記されたcssを適用、jqueryのバージョンを使用し、再度提示のコード+①、②の修正で確認しましたが、動作するようです。 >思うように動いてくれません 質問文のまま動きは変わらないのでしょうか。変わったのならそれを教えてください。 使用しているブラウザを教えてください。 ブラウザの開発者ツールにて、何かエラーが出ていないかを確認してください。 また、ブレークポイントを張り、該当箇所の処理が実行されていることを確認してください。
退会済みユーザー

退会済みユーザー

2017/06/15 13:41

>質問文のまま動きは変わらないのでしょうか。変わったのならそれを教えてください。 ①と②を修正しても、修正する前と、動きが変わりません。 >使用しているブラウザを教えてください。 ChromeとFirefoxです。 >ブラウザの開発者ツールにて、何かエラーが出ていないかを確認してください。 FirefoxのFirebugでみる限り、エラーは出ていません。
退会済みユーザー

退会済みユーザー

2017/06/15 15:00 編集

「別ページから飛んで来たとき、タブを切り替えて表示させたい」とありますが、 別の記述方法で、実装できました。 ですが、これはこれでまた別の問題があるので、別途質問しています。 https://teratail.com/questions/80553?modal=q-comp 今質問している方法も、解決できれば、したいので、引き続きアドバイスをいただけると幸いです。
moredeep

2017/06/16 00:00

こちらchromeで確認できているので、申し訳ないのですが原因がわかりません。 1行ずつ実行や、console.log等で、location.hash、hash(matchの後)、$('ul.navi_wrap li#' + tabname)の結果等の値を表示してみて、どこがおかしいのか探してみてください。
m.ts10806

2017/06/21 01:51

質問者様 いっそのこと現在の状態のソースコードを提示されてはどうでしょうか。 どこかに回答者様の提案どおりにできていない箇所があるのではと思います。
m.ts10806

2017/06/21 01:56 編集

それか質問者様側の意図ややりたいことが上手くこちらに伝わっていないか。 私も理解した感じだと回答者様の今回の提案で上手く動いているように思うので。
退会済みユーザー

退会済みユーザー

2017/06/22 14:46

moredeepさん アドバイスありがとうございました。 一つ一つ結果を出した結果、たどりつきました。
guest

0

ベストアンサー

「別ページからリンクしてきた場合」以下にあるJavaScriptを次のように修正したら、
思うような動きができました。

修正ポイント①読み込みのタイミング
$(function() { → $(window).load(function(){

修正ポイント②ほしい情報の割り出し方
以下のソースコード2カ所を削除

if($(hash).length){ //[#box~]である場合、#より後を取得 var tabname = hash.slice(1) ; } else{ //[#box~]でない場合、「box01」を表示 var tabname = "box01" ; }
var tabno = $('ul.navi_wrap li#' + tabname).index();

以下のソースコードを追記

var tabname = hash.slice(4); var tabbar = tabname - 1;

記述し直したものが次のソースコードです。

javascript

1 $(window).load(function(){ 2 //#以下を取得 3 var hash = location.hash; 4 //[#box~]であるか確認 5 hash = (hash.match(/^#box\d+$/) || [])[0]; 6 // さらに割り出し 7 var tabname = hash.slice(4); 8 var tabbar = tabname - 1; 9 10 //コンテンツをすべて非表示 11 $('.box_text').css('display','none'); 12 //指定内容のみ表示 13 $('.box_text').eq(tabbar).fadeIn(); 14 15 //タブをすべてoff 16 $('ul.navi_wrap li').removeClass('active'); 17 //選択したタブのみon 18 $("ul.navi_wrap li").eq(tabbar).addClass('active'); 19 });

これで、別のページからタブを指定して飛んできたら、
指定したタブを選択した状態で表示されるようになりました。

アドバイスありがとうございました。

投稿2017/06/22 14:42

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問