2012-05-11 14 views
10

私はclients' siteのコンテンツをタブするためにTW Bootstrapのタブを使用しています。私はjScrollpaneライブラリを初期化する必要があるので、 "データトグル"を削除するためにHTMLマークアップを設定しました。クリック。Twitter Bootstrapタブhref = "#"アンカータグジャンプ

私はこれをうまく利用していますが、ナビゲーションアイコンの1つをクリックするとページが下に飛びます。

どうすればこのようなことが起こらないようにすることができますか?

次のように私のマークアップは次のとおりです。

HTML

<ul class="nav nav-tabs"> 
      <li class="home_tab active"><a href="#home"></a></li> 
      <li class="about_tab"><a href="#about"></a></li> 
      <li class="services_tab"><a href="#services"></a></li> 
      <li class="cases_tab"><a href="#case_studies"></a></li> 
      <li class="contact_tab"><a href="#contact_us"></a></li> 
      <li class="news_tab"><a href="#news"></a></li> 
</ul> 

<div class="tab-content"> 
      <div id="home" class="tab-pane active scroll_tab"> 
      <?php if (have_posts()) while (have_posts()) : the_post(); ?> 
      <h2> 
       <?php the_title(); ?> 
      </h2> 
      <?php the_content(); ?> 
      <?php endwhile; ?> 
      </div> 
      <div id="about" class="tab-pane"> 
      <?php 
       $page_id = 9; 
       $page_data = get_page($page_id); 
       echo '<h2>'. $page_data->post_title .'</h2>';// echo the title 
       echo apply_filters('the_content', $page_data->post_content); // echo the content and retain Wordpress filters such as paragraph tags. 
      ?> 
      </div> 
      <div id="services" class="tab-pane"> 
      <div class="signs"> 
      <ul class="nav-tabs sub_tabs"> 
       <li class="roll_labels"><a data-toggle="tab" href="#roll_labels"></a></li> 
       <li class="sheeted_labels"><a data-toggle="tab" href="#page1"></a></li> 
       <li class="fanfold_labels"><a data-toggle="tab" href="#page1"></a></li> 
       <li class="printers"><a data-toggle="tab" href="#page1"></a></li> 
      </ul> 
      </div> 
      <?php 
       $page_id = 11; 
       $page_data = get_page($page_id); 
       echo '<h2>'. $page_data->post_title .'</h2>';// echo the title 
      echo apply_filters('the_content', $page_data->post_content); // echo the content and retain Wordpress filters such as paragraph tags. 
     ?> 
     </div> 
     <div id="case_studies" class="tab-pane"> 
     <?php 
      $page_id = 13; 
      $page_data = get_page($page_id); 
      echo '<h2>'. $page_data->post_title .'</h2>';// echo the title 
      echo apply_filters('the_content', $page_data->post_content); // echo the content and retain Wordpress filters such as paragraph tags. 
     ?> 
     </div> 
     <div id="contact_us" class="tab-pane"> 
     <?php 
      $page_id = 15; 
      $page_data = get_page($page_id); 
      echo '<h2>'. $page_data->post_title .'</h2>';// echo the title 
      echo apply_filters('the_content', $page_data->post_content); // echo the content and retain Wordpress filters such as paragraph tags. 
     ?> 
     </div> 
     <div id="news" class="tab-pane"> 
     <?php 
      $page_id = 144; 
      $page_data = get_page($page_id); 
      echo '<h2>'. $page_data->post_title .'</h2>';// echo the title 
     ?> 
     <?php 
      // Load Latest Blog - Limited to 2 items           
      $recent = new WP_Query("tags=blog&showposts=2"); while($recent->have_posts()) : $recent->the_post();?> 
     <div class="news_excerpt"> 
      <h3><?php the_title(); ?></h3> 
      <p><?php echo limit_words(get_the_excerpt(), '40'); ?> ...</p> 
      <a data-toggle="modal" href="#newsModal-<? the_ID(); ?>" id="newspopup"> 
        <img src="<?php bloginfo('template_url'); ?>/assets/img/content/team_read_more.png" alt="Read More" style="border:none;"> 
      </a> 
      <div class="modal hide fade" id="newsModal-<? the_ID(); ?>"> 
      <div class="modal-header"> 
       <button data-dismiss="modal" class="close">×</button> 
       <h3><?php the_title(); ?></h3> 
      </div> 
      <div class="modal-body"> 
       <p><?php the_post_thumbnail('news_image'); ?></p> 
       <p><?php the_content(); ?></p> 
      </div> 
      </div> 
      <?php endwhile; ?> 
     </div>   
     </div> 
     <div id="roll_labels" class="tab-pane"> 
     <?php 
      $page_id = 109; 
      $page_data = get_page($page_id); 
      echo '<h2>'. $page_data->post_title .'</h2>';// echo the title 
      echo apply_filters('the_content', $page_data->post_content); // echo the content and retain Wordpress filters such as paragraph tags. 
     ?> 
     </div> 
    </div> 

jQueryの

$('.nav-tabs li a').click(function (e) { 
     $(this).tab('show'); 
     $('.tab-content > .tab-pane.active').jScrollPane(); 
    }); 

私は私が "ジャンプ" からページコンテンツを防ぐにはどうすればよい、と言うのようにアンカー?多くのありがとう。

答えて

21
$('.nav-tabs li a').click(function (e) { 
    e.preventDefault(); 
    $(this).tab('show'); 
    $('.tab-content > .tab-pane.active').jScrollPane(); 
}); 

e.preventDefault()を使用してください。これはデフォルトの動作を防ぎます(この場合は#にナビゲートします)

+1

ああヘクタールを持って

は私もフレキシボックスグリッド垂直位置で、何らかの理由で、高さを標準化することになりました! e.preventDefault()が何をしたのか不思議でした。ドキュメントからコピーを削除してはいけません。多くのありがとう – StuBlackett

+0

あなたは私のヒーローです – backman

+0

この回答はChromeで完全に機能しています。ただし、Firefoxでは動作しません。 – Aryo

1

@ paulslater19からの選択された回答は私のためには機能しませんでした。

<script> 
    $(document).ready(function() { 
    var hash = window.location.hash; 
    var link = $('a'); 
    $('.nav-tabs > li > a').click(function (e) { 
     e.preventDefault(); 
     hash = link.attr("href"); 
     window.location = hash; 
    }); 
    }) 
</script> 

またSO question 14185974を参照してください。次のコードは、トリックを行いました。

1

@ paulslater19の回答は私にとってはうまくいかなかった。しかし、次のコードは:

$('.nav-tabs li a').click(function(e) { 
    history.pushState(null, null, $(this).attr('href')); 
}); 

ブートストラップ3.2.0でテストしました。

Twitter Bootstrap: How To Prevent Jump When Tabs Are Clickedからこのコードがあります。

UPDATEは、ブートストラップ3.2.0のための完全な機能:データ・ターゲットの代わりのhrefを使用して

$().ready(function() { 
     // store the currently selected tab in the hash value 
     $("ul.nav-tabs > li > a").click(function (e) { 
      $(this).tab('show'); 
      history.pushState(null, null, $(e.target).attr("href")); 
     }); 

     // on load of the page: switch to the currently selected tab 
     $('ul.nav-tabs a[href="' + window.location.hash + '"]').tab('show'); 
    }); 
+0

あなたの答えはBootstrapの新しいバージョンで動作すると思います。答えの日付を確認することが重要です。 – StuBlackett

+0

これは私のためにboostrap 3.0とjquery 2.0.3で動作しません。ジャンプは停止しますが、タブは表示されません。 history.pushStateの後に.tab( 'show')を追加しようとしましたが、behaviouorを再作成しました。 – Tofuwarrior

+1

@Tofuwarrior私はブートストラップ3.2.0の完全な機能の答えを編集しました。 –

11

は、ブートストラップ3つの錠剤やタブで動作するようです。マウスカーソルがhref属性がないという事実のために変更されない場合は、少しのCSSを追加することができます

EDIT: コードは以下のように追加されます。 。私は非常に簡単な解決策を発見した

 <ul class="nav nav-tabs" > 
    <li class="active"><a href="#" data-target="#tab_id_1" data-toggle="tab"> Tab Name 1</a></li> 
    <li><a href="#" data-target="#tab_id_2" data-toggle="tab"> Tab Name 2 </a></li> 
    </ul> 
    <div class="tab-content"> 
     <div id="tab_id_1" class="tab-pane active"> 
       CONTENT 1 
      </div> 
      <div id="tab_id_2" class="tab-pane"> 
       CONTENT 2 
      </div> 
    </div> 
+2

サンプルコードを追加します。 –

+0

e.preventDefault()を使ってもうまくいきませんでした。ありがとうございました! – user752746

6

データターゲット= "#の添加が...私はただのhrefのタブで別の#を追加します。

<ul class="nav nav-tabs"> 
      <li class="home_tab active"><a href="##home"></a></li> 
      <li class="about_tab"><a href="##about"></a></li> 
      <li class="services_tab"><a href="##services"></a></li> 
      ... 
</ul> 

私はかどうかを知りませんそれは最高の解決策ですが、確かに迅速かつ簡単です。 私の場合はChromeとIE 10で動作し、要件については十分です。

+0

私のために働いた唯一の解決策。 Chrome、FF、IEでの作業。 – jeesus

+0

これはページ内でうまく動作しますが、URLに '## tab-name'を追加してタブにリンクしようとしたときに問題が発生しましたが、自分のコードで行うことができます。デフォルトのタブ動作はどこかわからない – ryan2johnson9

0

選択された回答は私にとっては効果的でしたが、私は別の解決策も発見しました。下の例のように、href属性を削除するだけです...

問題が< > -tagだけのHREF属性で十分です削除、jQueryの行動上の「優先順位」を持っていることのようですので

<ul class="nav nav-tabs"> 
    <li class="home_tab active"><a></a></li> 
    <li class="about_tab"><a></a></li> 
    <li class="services_tab"><a></a></li> 
    ... 

私のケースでは、本来の問題は本番環境でのみ表示され、開発中(同一コード)では見つからなかったため、わずらわしかったです。 HTMLやリンクされたリソースのページ間に違いは見つかりませんでした...とにかく、これで解決しました。

2

このようなあなたのタブのリンクを定義します。あなたは<a data-target="#home">代わりの<a href="#home">

についてはこちらを参照してくださいを使用することができます

<div class="tab-pane" id="step1">

+1

私はdownvotesを取得しません。この解決策は私のためにうまくいった。 –

+0

これはブートストラップで私にとって最善の答えでした。コンソールエラーもありません - 私からの投票。 – DaniB

0

:このような

<a data-target="#step1" data-toggle="tab">

とあなたのタブ自体を例:jsfiddle DEMO

0

タブペインの高さが異なる場合、タブがジャンプすることがわかりました。グレムリン

function tabs_normalize() { 
    var tabs = $('.tab-content .tab-pane'), 
     heights = [], 
     tallest; 
    // check for tabs and create heights array 
    if (tabs.length) { 
     function set_heights() { 
      tabs.each(function() { 
       heights.push($(this).height()); 
      }); 
      tallest = Math.max.apply(null, heights); 
      tabs.each(function() { 
       $(this).css('min-height',tallest + 'px'); 
      }); 
     }; 
     set_heights();  
     // detect resize and rerun etc.. 
     $(window).on('resize orientationchange', function() { 
      tallest = 0, heights.length = 0; 
      tabs.each(function() { 
       $(this).css('min-height','0'); 
      }); 
      set_heights(); 
     }); 
    } 
} 
tabs_normalize();