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

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

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

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

20203閲覧

タブをクリックすると上部にスクロールされてしまう

kita

総合スコア12

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2017/02/08 03:53

編集2017/02/09 04:58

はじめまして。jQuery初心者です。
http://www.aiship.jp/knowhow/archives/28160

上記サイトのタグを拝借し、いい感じのところまでいっております。

ただ、タブをクリックする度に徐々に画面の上部にスクロールしてしまいます。
タブをクリックすればするほど少しずつ上部に移動し、
最終的には一番上に…

何かいい解決方法教えいただけませんでしょうか?<(_ _)>

==================
(追加)
すみません。少し原因が分かってきました。

common.jsファイル

// smooth scroll $(function(){ $('a[href^=#]').not('#header a,.tab li a,').click(function(){ var speed = 500; var href= $(this).attr("href"); var target = $(href == "#" || href == "" ? 'html' : href); var position = target.offset().top - 100; $("html, body").animate({scrollTop:position}, speed, "swing"); return false; }); });

という記載があり、どうやらこれが影響しているようです。
$('a[href^=#]').not('#header a,.tab li a,').click(function(){
を、
$('a[href^=#]').not('#header a,.tab li a,#tabindex li a').click(function(){
と書き換えれば、問題は解決するのですが、
このcommon.jsファイル事態を触ることが禁止されています。

出来れば、test.jsファイル(以下、記載)内で解決したく、

$(function(){ $('#tabcontents div[id != "tab01"]').hide(); $("a").click(function(){ $("#tabcontents div").hide(); $($(this).attr("href")).show(); $(".current").removeClass("current"); $(this).addClass("current"); return false; }); });

上記記載内で解決できませんでしょうか?

htmlも念のため記載しておきます

<section id="tabindex"> <ul> <li><a href="#tab01" class="current">color</a></li> <li><a href="#tab02" class="">size</a></li> <li><a href="#tab03" class="">Material</a></li> <li><a href="#tab04" class="">Country</a></li> <li><a href="#tab05" class="">aa</a></li> </ul> <div id="tabcontents"> <div id="tab01"> <p> <strong>Blue/Red/White</strong></p> <p></p> </div> <div id="tab02"> <p><strong>36・38・40</strong></p> <p></p> </div> <div id="tab03"> <p><strong>cotton 100%</strong></p> <p></p> </div> <div id="tab04"> <p><strong>Japan</strong></p> <p></p> </div> <div id="tab05"> <p><strong>aaa</strong></p> <p></p> </div> </div> </section>

ちなみに、<ul class="tab">としたら、タブのスクロールは解決しましたが、
タブ下の表示部分が崩れました( ノД`)シクシク…

================追加=======

a要素でクリックせずに~を試しました
解決できましたー(^^)/

$(function(){ $('#tabcontents div[id != "tab01"]').hide(); $( 'span[data-href]' ).on( 'click', function() { $("#tabcontents div").hide(); $( $( this ).data( 'href') ).show(); $(".current").removeClass("current"); $(this).addClass("current"); return false; }); });
<section id="tabindex"> <ul> <li><span data-href="#tab01" class="current">color</span></li> <li><span data-href="#tab02" class="">size</span></li> <li><span data-href="#tab03" class="">Material</span></li> <li><span data-href="#tab04" class="">Country</span></li> <li><span data-href="#tab05" class="">aa</span></li> </ul> <div id="tabcontents"> <div id="tab01"> <p> <strong>Blue/Red/White</strong></p> <p></p> </div> <div id="tab02"> <p><strong>36・38・40</strong></p> <p></p> </div> <div id="tab03"> <p><strong>cotton 100%</strong></p> <p></p> </div> <div id="tab04"> <p><strong>Japan</strong></p> <p></p> </div> <div id="tab05"> <p><strong>aaa</strong></p> <p></p> </div> </div> </section>

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

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

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

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

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

kei344

2017/02/08 05:27

JQとはjQueryのことでしょうか。また、書かれている状況が再現するコード(HTML/CSS/JavaScriptなど)を提示されたほうが回答を得やすいと思います。
kei344

2017/02/08 05:40

質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
guest

回答2

0

ベストアンサー

【Check! jQuery ですでに登録されているイベントを取得し、割込ませたりするメモ - Qiita】
http://qiita.com/dz_/items/e5da8ed692720a69126c

上記記事のコードを少し改変し、イベントを付け直すことが出来ることを確認しました。

JavaScript

1$( function() { 2 // 元のクリックイベントを設定する 3 $( '#submit' ).on( 'click', function() { 4 console.log( 'Message is ' + $( this ).text() ); 5 }); 6 7 // クリックイベントに設定されたハンドラを取得する 8 var events = $._data( $( '#submit' ).get( 0 ), 'events' ); 9 var originalHandler = events.click[ 0 ].handler; 10 11 // 元のクリックイベントを外す 12 $( '#submit' ).off( 'click', originalHandler ); 13 14 // セレクタを変えて、クリックイベントに、元のハンドラを設定する 15 $( '#submit, #message' ).on( 'click', originalHandler ); 16} ); 17```**動くサンプル:**[https://jsfiddle.net/f2dtneh6/1/](https://jsfiddle.net/f2dtneh6/1/) 18 19--- 20 21**追記:** 22 23a要素でクリックせずに、span要素などに書き換えてしまえば他の関数のことを考える手間も無いでしょう。 24 25```HTML 26<!-- 27<li><a href="#tab01" class="current">color</a></li> 28↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ --> 29<li><span data-href="#tab01" class="current">color</span></li>

JavaScript

1// $( 'a' ).click( function(){ 2// ↓ 3 $( 'span[data-href]' ).on( 'click', function() {

JavaScript

1// $( $( this ).attr( 'href') ).show(); 2// ↓ 3 $( $( this ).data( 'href' ) ).show(); // $( this ).data( 'data-href' ) から修正 4```**動くサンプル:**[https://jsfiddle.net/u0g0p7k5/](https://jsfiddle.net/u0g0p7k5/)

投稿2017/02/08 06:34

編集2017/02/08 08:21
kei344

総合スコア69400

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

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

kita

2017/02/08 07:00

ありがとうございます。。。ですが、ほとんどよくわかりません(-_-;)面目ないです。 上記に記載いただいたコードをtest.jsにそのまま記載すれば、解決でしょうか? 試みたのですが、変化なしで…編集が必要でしょうか??
kei344

2017/02/08 07:10

回答したのは実証用コードです。ご自身の環境に合わせて編集することが必要になります。
kita

2017/02/08 07:18

すみません。超初心者なので、どの辺をどう編集すべきかもご教授いただけると有り難いです。。。 ご面倒おかけして申し訳ありません<(_ _)>
kei344

2017/02/08 07:35

// クリックイベントに設定されたハンドラを取得する より前は実証コード用のものなので無視してしまってください。 $( '#submit' ) のクリックイベントに割り当てられた関数を originalHandler に入れています。 何がどうわからないかわからないため、これ以上なんとも回答できません。正直この解決方法は「初心者向き」ではないので、不適切だったかもしれません。
kita

2017/02/08 07:40

色々ありがとうございました。なんとか上記情報で頑張ってみます。。 私自身、このサイトを利用するのも初めて、さらに仰る通り「何がどうわからないかわからない」状況です。 こんな状態で大変失礼いたしました。 度重なるご協力、ありがとうございました<(_ _)>
kei344

2017/02/08 08:18

あ、追記の分、$( this ).data( 'href')にしてください。回答も修正しておきます。
kita

2017/02/08 08:26

あっ!!上手くいきました!!すごい!かんどーー(=゚ω゚)ノ 本当に長々とお付き合いいただきありがとうございました! 本当に感謝・感激です!ありがとーーー!!
guest

0

恐らくaタグでタブが構成されていて、href="#"になっているのではありませんか?
であればhrefの動きをキャンセルしないとトップに飛びます。URLに#が付いていると思います。

javascript

1$('a').on('click', function()){ 2 // タブ処理 3});

みたいになっている部分があると思いますので

javascript

1$('a').on('click', function()){ 2 // タブ処理 3 return false; 4});

にすればhrefの動きをキャンセル出来ます。

投稿2017/02/08 04:01

takepieee

総合スコア686

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

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

kita

2017/02/08 05:31

return false; は既に入っています。。。
takepieee

2017/02/08 07:01

test.jsにも同じ発火条件($('a[href^=#]').not('#header a,.tab li a,#tabindex li a').click(function(){ )にしてみてはいかがでしょうか?
kei344

2017/02/08 07:11

To: takepieeeさん 同じ発火条件にしても先に登録された関数からの発火になると思います。
kita

2017/02/08 07:16

$("a").click(function(){の箇所を上記に変更で合ってますか? 試みましたが、上手くいきませんでした。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問