Bootstrap Tabを使ってデータ設定を行うときに、再表示したりページを移動して元に戻ると、表示されるTabが初期状態に戻り、データ設定を行う場合、再度Tabを選択する必要があります。また、formタグを使ってデータを入力したときに入力データを表示しようとしても、Tabの表示位置が初期の状態に戻ってしまいます。Bootstrap Tabでの入力の操作性をよくするために、jQueryを使ってBootstrap Tabを制御します。
jQueryを使ったBootstrap Tabの制御ロジックの作成
Bootstrap Tabは「bootstrap-tab.js」を使用します。表示されているタブの位置をcookieに保存します。保存するために、「jquery.cookie.js」を使用します。次の制御ロジックは次の二つの機能を持ちます。
- 「タブ4に切り替えるボタン」を作成して、このボタンが押されるとイベントを発生させ、33行目でこのイベントを受け取り、34行目のshowコマンドにより「タブ4」を表示します。
- 画面の表示が終了すると、14行目が実行され、cookieに「openTag」が登録されていると、その値に対応するタブが表示されます。タブが押されると、25行目のスクリプトが読み込まれたタイミングで「openTag」という名前に「items[1]」、つまり「tabxx」(xxタブの番号)が保存されます。このcookieの有効期限は700日間です。
tabmenu/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>TomoSoft Tab Menuのチェック</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="./js/bootstrap-tab.js"></script>
<script src="./js/jquery.cookie.js"></script>
<script type="text/javascript">
$(function() {
if($.cookie("openTag")){
//一旦すべての active を外す
$('a[data-toggle="tab"]').parent().removeClass('active');
$('a[href=#' + $.cookie("openTag") +']').click();
//$('a[href=#' + $.cookie("openTag") +']').parent().addClass('active');
}
$('a[data-toggle="tab"]').on('shown', function (e) {
var tabName = e.target.href;
var items = tabName.split("#");
//クッキーに選択されたタブを記憶
$.cookie("openTag",items[1], { expires: 700 });
});
});
</script>
<!-- jQuery -->
<script>
$(function() {
// ボタンクリックでタブを切り替え
$('#change-to-access-tab').click(function(e) {
$('.nav-tabs a[href="#tab04"]').tab('show');
});
});
</script>
</head>
<body>
<div class="container">
<h1>TomoSoft Tab Menuのチェック</h1>
<div class="clearfix">
<ul id="myTab" class="nav nav-tabs">
<li class="active"><a href="#tab01" data-toggle="tab">タブ1</a></li>
<li><a href="#tab02" data-toggle="tab">タブ2</a></li>
<li><a href="#tab03" data-toggle="tab">タブ3</a></li>
<li><a href="#tab04" data-toggle="tab">タブ4</a></li>
<li><a href="#tab05" data-toggle="tab">タブ5</a></li>
</ul>
<div id="myTabContent" class="tab-content">
<div class="tab-pane fade in active" id="tab01">
タブ1の内容
</div>
<div class="tab-pane fade in" id="tab02">
タブ2の内容
</div>
<div class="tab-pane fade in" id="tab03">
タブ3の内容
</div>
<div class="tab-pane fade in" id="tab04">
タブ4の内容
</div>
<div class="tab-pane fade in" id="tab05">
タブ5の内容
</div>
</div>
</br>
<button id="change-to-access-tab" class="btn btn-primary">タブ4に切り替えるボタン</button>
</div>
</div>
</body>
</html>
Queryを使ったBootstrap Tabの制御ロジックの実行
ブラウザから次のURLを入力し、作成したhtmlファイルを実行します。
http://localhost/tabmenu/index.html
ブラウザに次の画面が表示されます。
「タブ4に切り替えるボタン」を押すと、次のように「タブ4」が表示されます。
次に「タブ5」をクリックし、「タブ5」が表示されると、ブラウザの「再読み込み」ボタンを押します。設定されたURLが再読み込みされ、次のように「タブ5」が表示されます。ブラウザ「Chrome」では、デベレロッパーツールを起動し、「Application」の「Cookies」を選択すると、「openTag」の内容が確認できます。


