質問するログイン新規登録
JavaScript

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

jQuery

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

Q&A

1回答

1084閲覧

[JS]デフォルトで開くタブを設定したい

namihana

総合スコア23

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2020/08/14 09:43

0

0

※以前にも同じ質問を投稿しましたが、追記が多くなりすぎて見にくくなったため再投稿いたします。

JQueryでタブの操作をコントロールするコードを書いております。

デフォルトで開くタブをtab2.html上でselectをつけることで固定したいのですが、なぜかselectをつけていないタブがデフォルトで開かれてしまいます。

問題としてはtab2.htmlを直接、開いたときにtab3がひらかれてしまうということです。

どなたかわかる方いらっしゃらないでしょうか?

なおこのコードはタブだけでなく、違うページからリンクしてきたときに特定のタブを指定できるようにしており、かつページ内ジャンプの機能もはいっております。

文章でうまく説明できない部分があるので、Githubのリンクを貼りました。
https://github.com/nannantown/new-tab

cssのhtmlも入っておりますので、どなたかみていただけないでしょうか?

<script type="text/javascript"> $(function() { //クリックしたときのファンクションをまとめて指定 $('ul.tab_area li').click(function() { //.index()を使いクリックされたタブが何番目かを調べ、 // indexという変数に代入します。 var index = $('ul.tab_area li').index(this); //コンテンツを一度すべて非表示にし、 $('.content_area').css('display','none'); //クリックされたタブと同じ順番のコンテンツを表示します。 $('.content_area').eq(index).fadeIn(); //タブについているクラスselectを消し、 $('.tab_area li').removeClass('select'); //クリックされたタブのみにクラスselectをつけます。 $(this).addClass('select') }); }); //ダイレクトリンク $(function() { var urlParam = location.search.substring(1); if(urlParam) { var param = urlParam.split('&'); var paramArray = []; for (i = 0; i < param.length; i++) { var paramItem = param[i].split('='); paramArray[paramItem[0]] = paramItem[1]; } if(paramArray.hash.length){ var tabname = paramArray.hash; }else{ var tabname = "tab1"; } } //コンテンツを一度すべて非表示にし、 $('.content_area').css('display','none'); //一度タブについているクラスselectを消し、 $('.tab_area li').removeClass('select'); var tabno = $('ul.tab_area li#' + tabname).index(); //クリックされたタブと同じ順番のコンテンツを表示します。 $('.content_area').eq(tabno).fadeIn(); //クリックされたタブのみにクラスselectをつけます。 $('ul.tab_area li').eq(tabno).addClass('select'); if(paramArray.anc.length){ var ancname = paramArray.anc, ancOffset = $('#' + ancname).offset().top; if(ancOffset){ $('html,body').animate({scrollTop: ancOffset}, 400); } } }); </script>

↓飛ぶ前 index.html

<ul> <li><a href="tab2.html?hash=tab1">shampooこのリンクはTab1に飛びます。</a></li> <li><a href="tab2.html?hash=tab2">aminoこのリンクはTab2に飛びます。</a></li> <li><a href="tab2.html?hash=tab3">ururiこのリンクはTab3に飛びます。</a></li> <li><a href="tab2.html?hash=tab2&anc=first">sarariこのリンクはTab2のfirstリンクに飛びます。</a></li><!-- tab2firstに飛びたい--> <li><a href="tab2.html?hash=tab2&anc=second">kururiこのリンクはTab2のsecondリンクに飛びます。</a></li><!-- tab2secondに飛びたい--> </ul>

↓飛び先tab2.html

<body> <div class="all_area"> <ul class="tab_area"> <li id="tab1" class="select">Tab1</li> <li id="tab2">Tab2</li> <li id="tab3">Tab3</li> </ul> <!-- tab1 start --> <div class="content_area"> <ul class="list_area"> <li>これはTab1の内容です</li> <li>これはTab1の内容です</li> <li>これはTab1の内容です</li> <li>これはTab1の内容です</li> </ul> <!-- /tab1 end --> </div> <!-- tab2 start --> <div class="content_area hide"> <p>これはTab2の内容です。これはTab2の内容です。これはTab2の内容です。これはTab2の内容です。これはTab2の内容です。これはTab2の内容です。</p> <!-- /tab2 end --> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <a id="first">ここに飛びたい</a> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <a id="second">ここに飛びたいpart2</a> <br> <br> <br> <br> <br> <br> <br> </div> <!-- tab3 start --> <div class="content_area hide"> <p>これはTab3の内容です<br> </p> <!-- /tab3 end --> </div> <!-- /tab area end --> </div> </body>

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/08/16 01:50

tab2.htmlでChromeで開き、F12やCtrl+Shift+Iで開発者ツールを開きましょう。 そこでConsoleを見てみてください。 jquery.min.js:2 Uncaught TypeError: Cannot read property 'anc' of undefined at HTMLDocument.<anonymous> (tab2.html:194) こんなエラーが出ています。ancがundefinedだと言われてます。 理由を知るためには、tab2.htmlの165行目にブレークポイントを張り、Reloadしてみましょう。 ここでurlParamの値を見てください。 JavaScriptでは""はfalseに判定されるので、まあそうなるわけです。 こういう作業を世間ではデバッグと言います。通常よほどのことがない限り、他人に頼むことはありません。自分で書いたコードは自分が一番良くわかるからです。次回からは「どなたかわかる方いらっしゃらないでしょうか?」とは言わず、自分でデバッグしてみてください。 解決方法については、どうせロード時にクエリ文字列も見るんだからまとめてタブ判定をしてもいいし、その際のデフォルトタブはHTMLの中に入れてもいいし、JavaScript側に固定で入れてもいいと思います。
namihana

2020/08/17 15:25

ご回答ありがとうございます。ご指摘参考になりました。 これからは自分でデバッグしてみようと思います。
guest

回答1

0

こんな感じですかね?

javascript

1$(function(){ 2 var hash=getParam("hash","tab1"); 3 $('.tab_area li').on('click',function(){ 4 var idx=$('.tab_area li').index(this); 5 $('.tab_area li').removeClass('select').eq(idx).addClass('select'); 6 $('.content_area').addClass('hide').eq(idx).removeClass('hide'); 7 }).filter($('#'+hash)).trigger('click'); 8 var anc=getParam("anc",null); 9 if(anc) $("html, body").animate({scrollTop:$('#'+anc).offset().top}); 10}); 11function getParam(key,def){ 12 var get=location.search.substring(1); 13 var m; 14 return (m=get.match(new RegExp(`(?:^|&)${key}=(.+?)(?=&|$)`)))?m[1]:def; 15}

投稿2020/08/15 03:14

編集2020/08/15 03:16
yambejp

総合スコア117973

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

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

namihana

2020/08/17 15:26

一度上記のコードをjsの末尾に入れてみたのですが、他のアンカーに飛ぶ動作が不完全でした、、こちらの入れ方が悪いのかもしれませんが、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問