2017-02-28 3 views
0

jQueryを使用して、ユーザーをページの先頭に戻すアンカータグを更新しようとしています。ページのコンテンツがページ自体のheightより大きい場合、リンクが表示されます。コンテンツがページ自体よりも大きくない場合、リンクは表示されません。jQueryを2回クリックして機能する

コンテンツエレメントのheightは、navのリンクから返されるコンテンツに依存します。だから、リンククリックで、私はコンテンツ要素の高さを取得し、私は "トップに戻る"リンクを表示する必要があるかどうかを判断します。

問題はありませんが、問題が発生した場合は、navタブを2回クリックする必要があります。

のjQueryコード:

$(document).ready(function() { 
    $("a[data-toggle]").click(function() { 
     var pct = Math.round(($("div.tab-content").outerHeight(true)/$(window).height()) * 100); 
     if (pct > 90) { 
      $("#top-link").text("Back to top"); 
     } else { 
      $("#top-link").empty(); 
     } 
    }); 
}); 

ナビゲーションコード:

<header> 
    <nav> 
     <ul class="nav nav-tabs"> 
      <li><a data-toggle="tab" href="#configs" >Configs</a></li> 
      <li><a data-toggle="tab" href="#error-log" >Error Log</a></li> 
      <li><a data-toggle="tab" href="#user-log" >User Log</a></li> 
     </ul> 
    </nav> 
</header> 

コンテンツ要素:

<main> 
    <div class="tab-content"> 
     This area is populated with data depending on the nav link clicked. 
    </div> 
</main> 

は「トップに戻る」リンク:

<a id="top-link" href="#top"></a> 

それが最初のクリックで機能するように、これを固定して援助のため、事前にありがとうございます。 L-トレイン@

Fiddle

+0

あなたはおそらく 'snippet'または' fiddle'を追加し、このシナリオを再現してもらえますか? –

+0

質問が更新されました。フィドルが追加されました。 –

+0

あなたがフィドルに行くときは、タブ1をクリックし、ページの一番下までスクロールして、トップに戻るためのリンクがないことに注意してください。タブ1をもう一度クリックすると、リンクが表示されます。 –

答えて

1

問題は、コンテンツがレンダリングされる前に計算が行われていて、if conditionに間違った値が取り込まれているということです。click event。私が示唆しているのは、click eventは、back-to-topのテキストを設定/消去する必要がないということです。代わりにshown.bs.tabイベントをbootstrap tabとし、tabが表示されたら操作を実行できます。あなたのJSコードが更新されるのは以下の通りです。

$(document).ready(function() { 
    setInterval(updateClock, 1000); 
}); 

$(document).on('shown.bs.tab', 'a[data-toggle="tab"]', function(e) { 
    var pct = Math.round(($("div.tab-content").outerHeight(true)/$(window).height()) * 100); 
    if (pct > 90) { 
    $("#top-link").text("Back to top"); 
    } else { 
    $("#top-link").empty(); 
    } 
}); 

Here's the updated fiddle

提案の一環として、私の代わりに設定にして、テキストをクリアし、あなただけのように、#top-link要素に.hide.showを使用することができることをお勧めしたいと思います$("#top-link").show()および$("#top-link").hide()である。

Demo for that

+1

私がどこに間違っていたのか、その提案を見つけてくれてありがとう。どちらも素晴らしいです。 –

+0

いつでも..ハッピーコーディング.. :) –

0

あなたはあなたがあなたのコードのいずれかのエラーを持っていないことを確認するためにチェックすることができグーグルクロームを持っていますか?マウスを右クリックしてinspect要素を実行できますか?

+0

コメント欄にある必要があります – JYoThI

+0

はい、私はその機能を提供するクロームやその他のブラウザを持っています。私は行ってコンソール領域をチェックし、問題のスクリプトに関するエラーは表示されません。 –

関連する問題