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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

Q&A

解決済

3回答

5835閲覧

リロード後もタブを維持する方法

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

0グッド

1クリップ

投稿2021/04/12 12:49

編集2021/04/13 10:17

一つのファイル(index.php)に、
2つのタブ(A,B)でコンテンツを分けています。
CSSのinputのradioでタブ機能を実現しています。

課題は、タブBでformメソッドのsubmitボタンを押したときに、
リロード後、タブAが表示されることです。

実現したいことは、
リロード後もタブBで表示されることです。

質問したいことは、
どういった方法で実現するのが良いのか?
アドバイスいただけると幸いです。

よくあるケースだとは思いますが、
調べても、なかなか参考が見当たらず、
こちらに質問いたしました。

どうぞよろしくお願い致します。

html

1<div class="tab-wrap"> 2 3<input id="TAB-01" type="radio" name="TAB" class="tab-switch" checked> 4<label class="tab-label" for="TAB-01">タブA</label> 5<div class="tab-content"> 6<form method="post"> 7<input type='submit' name='' value=''> 8</form> 9</div> 10<input id="TAB-02" type="radio" name="TAB" class="tab-switch"> 11<label class="tab-label" for="TAB-02">タブB</label> 12<div class="tab-content"> 13<form method="post"> 14<input type='submit' name='' value=''> 15</form> 16</div> 17 18</div>

css

1.tab-switch { 2display: none; 3} 4.tab-wrap { 5display: flex; 6flex-wrap: wrap; 7} 8.tab-label { 9order: -1; 10position: relative; 11z-index: 1; 12} 13.tab-content { 14width: 100%; 15height: 0; 16overflow: hidden; 17opacity: 0; 18} 19.tab-switch:checked+.tab-label+.tab-content { 20height: auto; 21overflow: auto; 22opacity: 1; 23}

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

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

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

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

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

hentaiman

2021/04/12 13:52

htmlのみで?タブ?
think49

2021/04/13 09:47

@hentaiman さん 「CSSのinputのradioでタブ機能を実現しています」とあるので、:checked擬似クラスを利用しているのでしょう。 https://jsfiddle.net/m9y4nbLj/ 実装に影響するのでCSSも明記すべきだと思いますが…。 https://ja.stackoverflow.com/help/minimal-reproducible-example <label class="tab-label" for="TAB-04"> は誤記としか思えません。 input要素を非表示にすると実装不可能になります。
退会済みユーザー

退会済みユーザー

2021/04/13 10:09

><label class="tab-label" for="TAB-04"> 誤記でした。ご指摘いただきありがとうございます。 CSSは、今回は大まかな方法をお尋ねしたかったので、省略いたしました。 申し訳ございません。失礼いたしました。
hentaiman

2021/04/13 13:39

> 実装に影響するのでCSSも明記すべきだと思いますが…。 stackoverflowの質問に記載するコードの例良いですね > 省略いたしました。 コピペで再現出来ないコードだと何をやりたいか分からないし、丸投げかとも思ったので作りかけのコードがあるなら隠さず載せるべきですね。 > 今回は大まかな方法をお もし自分が「リンクにURLパラメーターなど判別する要素を渡してそれを基に表示を切り替える処理を書きましょう」って書いたとして理解出来るなら良いと思いますけど、
think49

2021/04/14 02:30

> 今回は大まかな方法をお尋ねしたかったので、 方法を知りたいだけなら、その後の実装時の問題があったとしても質問範囲外となるはずなので、別に質問を立てるべきだとは思います。 後追いで質問が拡張されると回答側もだんだんと内容がぶれてきますし、始めの質問に回答した人を放置して後続質問への回答に注力しがちなので、避けたいところですね。 「やり方を教えてください」という体裁ながらも、ふたを開けてみれば実装面にも追求している質問は非常に多いので、回答側としては言葉通りに受け取る事は難しいです。 方法のみでよくて、コードが不要な事は質問文に明記しておくと良いと思います。
guest

回答3

0

ベストアンサー

input[type=radio] にチェックすればタブが開く実装と受け取りました。
タブを開く実装部分は本題ではなさそうなので割愛します。

今回は大まかな方法をお尋ねしたかったので、

「どのタブを開いているか」を保存する場所が問題で、私の知っている範囲では4つあります。

  • GETパラメータ
  • localStorage (※satokeiさんの回答通り)
  • IndexedDB
  • Cookie

各APIを調べれば、値の「参照方法」「保存方法」共に見つかると思います。
個人的にはGETパラメータをお勧めします。

  • ブラウザの保存領域を消費しない
  • サーバサイドスクリプト(PHP)でも参照できる
  • 履歴に残る(ブックマーク可能)
  • History APIと組み合わせれば、非同期動作が可能
  • URLSearchParamsでGETパラメータ参照可能

Re: satokei さん

投稿2021/04/13 11:17

think49

総合スコア18162

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

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

退会済みユーザー

退会済みユーザー

2021/04/13 11:25

ありがとうございます。 現在、「localStorage」で実装を試みています。 明日以降、「GETパラメータ」を試みます。 なにか疑問点があれば追記するかもしれませんが、 もしタイミングが合えばまた教えていただけると幸いです。 まずはご丁寧に分かりやすく教えていただき、 ありがとうございました。
退会済みユーザー

退会済みユーザー

2021/04/14 01:01

おかげさまで「GETパラメータ」で実現することができました。 コードはいちお後ほど追記いたします。 私の知識レベルに合っていて助かりました。 実現したかったことは単純なことでしたので、 教えていただいた、「History APIと組み合わせれば...」など 後半部分はまだ良く分かりませんが、 面倒を見てくださり大変、ありがとうございました!
guest

0

こちらのページが参考になるかと思います。

WEBページの再読み込みを行っても、チェックボックスの選択状態を保持するJavaScript

以下引用

ページの再読み込みでも、チェックボックスの状態を保持する方法

js

1function getStorage(key_prefix) { 2 // this function will return us an object with a "set" and "get" method 3 // using either localStorage if available, or defaulting to document.cookie 4 if (window.localStorage) { 5 // use localStorage: 6 return { 7 set: function (id, data) { 8 localStorage.setItem(key_prefix + id, data); 9 }, 10 get: function (id) { 11 return localStorage.getItem(key_prefix + id); 12 } 13 }; 14 } else { 15 // use document.cookie: 16 return { 17 set: function (id, data) { 18 document.cookie = key_prefix + id + '=' + encodeURIComponent(data); 19 }, 20 get: function (id, data) { 21 var cookies = document.cookie, 22 parsed = {}; 23 cookies.replace(/([^=]+)=([^;]*);?\s*/g, function (whole, key, value) { 24 parsed[key] = decodeURIComponent(value); 25 }); 26 return parsed[key_prefix + id]; 27 } 28 }; 29 } 30} 31jQuery(function ($) { 32 // a key prefix is used for the cookie/storage 33 var storedData = getStorage('com_mysite_checkboxes_'); 34 $('div.check input:checkbox').bind('change', function () { 35 $('#' + this.id + 'txt').toggle($(this).is(':checked')); 36 // save the data on change 37 storedData.set(this.id, $(this).is(':checked') ? 'checked' : 'not'); 38 }).each(function () { 39 // on load, set the value to what we read from storage: 40 var val = storedData.get(this.id); 41 if (val == 'checked') $(this).attr('checked', 'checked'); 42 if (val == 'not') $(this).removeAttr('checked'); 43 if (val) $(this).trigger('change'); 44 }); 45});

投稿2021/04/13 04:01

satokei

総合スコア1204

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

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

退会済みユーザー

退会済みユーザー

2021/04/13 08:31

教えて頂きありがとうございます。 明日、詳細に確認いたします。 御礼までに。
退会済みユーザー

退会済みユーザー

2021/04/14 00:57

localStorageを利用した方法で、半分、実装できました。 半分というのは、予期せぬ動作が生じてしまい、 それを修正するには、まだ知識が足りなく断念しました。 結果では、「GETパラメータ」で実現することができました。 私の今のレベルにはちょうど良いこともあります。 localStorageは勉強になりました。 ありがとうございました。
guest

0

「URLハッシュ」で実現できました。

大まかな方法は、リロード時に、
URLにアンカーを追加して
Javascriptで分岐させることで実現できました。

javascript

1 2var urlHash = location.hash; 3 4if(urlHash){ 5 6if (urlHash == '#TAB-02') { 7var element = document.getElementById( 'TAB-02' ); 8element.checked = true ; 9} else { 10var element = document.getElementById( 'TAB-01' ); 11element.checked = true ; 12} 13 14}else { 15var element = document.getElementById( 'TAB-01' ); 16element.checked = true ; 17} 18

投稿2021/04/14 01:05

編集2021/04/15 08:05
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

think49

2021/04/14 02:45 編集

> var urlHash = location.hash; 「URLハッシュ」と「GETパラメータ」は別物です。 GETメソッドでform送信した際に、URLクエリ文字列に埋め込まれた ?name=value がGETパラメータとなります。 https://www.google.com/search?q=get+parameter console.log(new URLSearchParams(location.search).get('q')); // "get parameter" URLハッシュはフラグメント識別子としての役割と衝突する為、GETパラメータを推奨しています。 URLハッシュを使うのなら、:target 擬似クラスで実装するのがエレガントです(CSSのみ、JS不要)。 https://developer.mozilla.org/ja/docs/Web/CSS/:target > } else { > ... > }else { else が2度出現しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問