前提・実現したいこと
最近レスポンシブデザイン (css
) を整えていたのですが、以前実装し終えたタブ機能が知らない内に機能しなくなっている事に気付きました。
3つのタブがあり、1つ目のタブとそのコンテンツがデフォルトで選択・表示されているのですが、2つ目以降のタブを押してもタブ・コンテンツ共に切り替わらず表示されない状態です。
該当のjs
ファイルは特別触っておりませんでしたので原因が分かりませんでした。エラーは特に発生しておりません。
該当のソースコード
users/show.html.erb
Rails
1<div class="tab-container"> 2 <ul class="tab-group"> 3 <li class="tab is-active">A</li> 4 <li class="tab">B</li> 5 <% if @current_user.id == @user.id %> 6 <li class="tab">C</li> 7 <% end %> 8 </ul> 9 10 <div class="panel-group"> 11 <div class="panel is-show"> 12 <!-- 中身省略。 --> 13 </div> 14 <div class="panel"> 15 <!-- 中身省略。 --> 16 </div> 17 <div class="panel"> 18 <!-- 中身省略。 --> 19 </div> 20 </div> 21</div>
tab.js
JS
1$(document).on('turbolinks:load', function() { 2 jQuery(function($){ 3 $('.tab').click(function(){ 4 $('.is-active').removeClass('is-active'); 5 $(this).addClass('is-active'); 6 $('.is-show').removeClass('is-show'); 7 // クリックしたタブからインデックス番号を取得 8 const index = $(this).index(); 9 // クリックしたタブと同じインデックス番号をもつコンテンツを表示 10 $('.panel').eq(index).addClass('is-show'); 11 }); 12 }); 13});
試したこと
1 . 該当のjs
ファイルに以下のコードを記述し改めて該当ページをリロードしますとアラートで「OK!」と表示されましたので、ファイル自体は読み込めているようです。
JS
1$(function() { 2 alert('OK!'); 3});
2 . Chromeのデベロッパーツールにて、該当のjs
ファイル内にブレークポイントを設定した上でタブの遷移を試みましたが、"Paused on breakpoint"の様に処理が止まる事がありませんでした。
3 . 他に使用しておりますjs
ファイルは処理が走っているようで、"Paused on breakpoint"の表示と共に処理が止まりました。
因みにそちらは「メッセージ機能において、最新のメッセージほど下に表示される為、ページ遷移した段階でスクロールバーを一番下に表示する」と言った内容です。
JS
1$(document).on('turbolinks:load', function() { 2 function scrollToEnd() { 3 const messageDetails = document.getElementById('scroll-inner'); 4 messageDetails.scrollTop = messageDetails.scrollHeight; 5 } 6 scrollToEnd() 7});
4 . application.html.erb
においてjQuery
のバージョンを変えてから試してみましたがダメでした。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> ↓ <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
5 . 上記users/show.html.erb
内に記載がありますis-show
クラスをインデックス番号1番ではなく2番目に置いてみると、2ページ目のコンテンツが表示されました。ですのでコンテンツの中身に問題がある訳ではないのかなと思いました。
しかし他のタブをクリックする事による遷移は相変わらず出来ません。
こうして試してみますと該当のjs
ファイル内が怪しいのかなと思いましたが、記述ミスを見つける事が出来ませんでした。
どなたかご助言を頂けますと有難いです。
補足情報(FW/ツールのバージョンなど)
ruby 2.6.4p104
RubyGems 3.0.3
Rails 5.2.3
jquery 1.12.4
追記
tab.js
1行目の$(document).on('turbolinks:load', function() {
を消したり$(document).on('ready page:load', function() {
に変えて試してみると、毎回ページをリロードすればタブが機能する様になりました。
turbolinks
が絡んでいるのかなと思いますが、まだ解決には至りません。ページのリロードなしでも(他のページから遷移してきた状態でも)タブが動くよう改善したいです。
回答2件
あなたの回答
tips
プレビュー