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

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

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

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

Q&A

解決済

1回答

4885閲覧

【jQuery】ページ内アンカーリンク:アコーディオン開閉する際に、一回前のハッシュが取得されてしまう

ysdpk

総合スコア10

jQuery

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

0グッド

0クリップ

投稿2017/03/19 02:42

###実現したいこと
ヘッダーのボタンをクリックすると、
該当のアコーディオンパネルにスクロールし、開く。

###発生している問題
一回前にクリックしたハッシュが取得されてしまう。

###該当のソースコード

HTML

1<section id="btn"> 2 <div class="box_z"> 3 <a href="#a1">#a1</a> 4 </div> 5 <div class="box_z"> 6 <a href="#a2">#a2</a> 7 </div> 8 <div class="box_z"> 9 <a href="#a3">#a3</a> 10 </div> 11 </section> 12 <section id="acd"> 13 <div class="box_c" id="a1"> 14 <div class="box_a"> 15 #a1 16 </div> 17 <div class="box_b"> 18 </div> 19 </div> 20 <div class="box_c" id="a2"> 21 <div class="box_a"> 22 #a2 23 </div> 24 <div class="box_b"> 25 </div> 26 </div> 27 <div class="box_c" id="a3"> 28 <div class="box_a"> 29 #a3 30 </div> 31 <div class="box_b"> 32 </div> 33 </div> 34 </section>

jQuery

1$(function() { 2 // クリックしたらアコーディオン開閉 3 $(".box_a").click(function(){ 4 $this = $(this); 5 $this.next().stop(); 6 $this.next().slideToggle(); 7 }); 8 9 //ヘッダーナビのボタンを押すと、 10 //アンカーリンクしてアコーディオン開閉 11 $("#btn a[href^=#a]").click(function() { 12 //一旦全てのアコーディオン閉じる 13 $(".box_b").hide(); 14 //ハッシュ取得 15 var hash = $(location).attr("hash"); 16 console.log(hash); 17 //アンカーリンクのズレを補正 18 var headerHeight = 200; 19 var position = $(hash).offset().top - headerHeight; 20 console.log(position); 21 $("html, body").animate({scrollTop:position}, 550,"swing"); 22 //アコーディオン処理 23 $(hash).children(".box_b").stop(); 24 $(hash).children(".box_b").slideToggle(); 25 }); 26}); 27

どうぞ、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

hashなら書き換わった後にしないと前の値というかクリックされた時の状態の値を取ってきますからクリックされた要素のhrefの値を取って処理する方が良いと思いますが、やりたい事が違っていたらすみません。

投稿2017/03/19 06:26

kyunta

総合スコア350

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

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

ysdpk

2017/03/19 06:55

ご回答いただき、誠にありがとうございます! 仰ったとおり、hrefの値を取るとうまくいきました! ```jQuery //ハッシュ取得 var href= $(this).attr("href"); var target = $(href == "#" || href == "" ? 'html' : href); ``` もしよろしければ、hashだとクリックされた時の状態の値を取ってくる理由といいますか、 参考サイトなどございましたら、お教えいただけますと幸いです! 恐れ入りますが、どうぞよろしくお願いいたします。
kyunta

2017/03/19 10:06

すみません、その辺の規格やブラウザやバージョンによる動作について詳しくはないので正確な回答ができません。 location系のイベントを捕まえるプラグインがあったような記憶はあるのですが、記憶違いかもしれません。 詳しい方からの回答があるといいのですが。
ysdpk

2017/03/20 04:27

お返事いただきありがとうございました! 調べてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問