Bootstrap で構築されたサイトにたくさんのアコーディオンがあります。アコーディオンの折りたたみが完了すると、ページが開いているパネルにスクロールする動作を追加しようとしています。IE を除くすべてのブラウザで動作します (もちろん!)。ここに私が書いた関数があります:
$('.accordion').on('hidden', function() {
$('.accordion .current').removeClass('current');
$(this).find('.in').prev().find('a').addClass('current');
$('html,body').animate({'scrollTop':$('.accordion-toggle.current').position().top},500);
})
IE は、新しく作成された「現在の」アイテムの position() プロパティが未定義であると言います。$('.current') でアラートを実行し、[object Object] を報告したため、オブジェクトがそこにあることはわかっていますが、その位置を見つけることができないようです。この関数の実行キューと関係がありますか? まだ存在しないオブジェクトの位置を探していますか? ここで髪をかきむしる!
HTML:
<div id="accordion" class="accordion">
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" href="#collapseOne" data-parent="#accordion" data-toggle="collapse">Panel 1</a>
</div>
<div id="collapseOne" class="accordion-body collapse">
<div class="accordion-inner">
<!-- Content goes here -->
</div>
</div>
</div>
</div>
@クリス・ホレベック...
現在開いているペインまでスクロールしたい。Bootstrap では、そのための自動プロビジョニングはありません。見出しにはクラスを追加しませんが、その下のペインに追加します。ウィンドウにも見出しが表示されるようにします。私は間違っているかもしれませんが、それが私がやろうとしていることであり、同じことを繰り返す危険を冒して、IE を除く他のすべてのブラウザーで動作します。
これは、私がやろうとしていることを示すフィドルです。IE で実行すると、動作しないことがわかります。