3

ハッシュをタブ名に変更するために、次のコードを追加しました。

$("#tabs > ul").tabs({ 
select: function(event, ui){ 
window.location.hash = ui.tab.hash; 
} 
} );

これはFF3では正常に機能しますが、IE7ではページを下に移動します(ページの上部近くからページの最後までのどこかで選択されたタブによって異なります)。

私はそれを次のように変更してみました:

$("#tabs > ul").tabs();
$("#tabs > ul").bind("tabsshow", function(event, ui) {
window.location = ui.tab.hash;
})

これにより、IE7とFF3の両方で同じ動作が発生し、ページが選択したタブの上部に移動します。

タブを変更し、ハッシュを更新したいのですが、ページはまったく移動しません。これは、最初の例のFF3では機能しますが、IE7では機能しません。

ありがとう。

注:JQuery 1.3.1 / JQuery-UI 1.6rc6

4

3 に答える 3

4

ハッシュを設定しているものと同じIDを持つ要素がページにある場合、たとえば、ブラウザのハッシュを#carsに設定しようとしていて、ページにすでにdiv#carsがある場合、ブラウザはそのdivがある場所まで下にスクロールします。

私の知る限り、3つの可能な回避策があります

1)ブラウザのハッシュを#thecarsなどの他のものに変更します。

2)同様の方法で既存のマークアップを変更します。

3)あるイベントでは、同じ名前のマークアップのIDを変更し、次にブラウザーハッシュを変更してから、マークアップの名前を元の値に戻すことも理論的には機能するはずです。これは明らかに悪い回避策であり、私が言及したいと思っただけです。

于 2009-12-13T06:30:47.767 に答える
2

「falseを返す」ことを試すことができます。ウィンドウの位置を設定した後ですが、よくわかりません。

残念ながら、あなたの問題はそれだけでは終わりません。複数のブラウザ間を行き来することには他にも問題があります。何も変わらない、ページがリロードされる、ページの状態が壊れる、javascriptが再初期化されるなどです。

jQuery 1.3以降では更新されていませんが、 History/Remoteプラグインを使用するTabsv2を確認することをお勧めします。

このデモは理解しやすいです。javascriptソースを見ると、状態を処理するためにiframeが使用されていることがわかります。

必要なことを実現するためのHistoryEventプラグインとjHistoryプラグインもあります。

状況がどうなるか、どのような解決策を採用したかをお聞きしたいと思います。

于 2009-02-21T06:59:58.387 に答える
2

クリスが提案したことは私にとってはうまくいきましたが、divが#を介してリンクできることさえわかりませんでした。だから私の解決策はショーで非常に簡単です: イベント ハンドラー、私は次のことを行います。戻るボタンが履歴にないという点で完璧ではありませんが、それは BBQ 履歴プラグインの別の仕事です。私のすべての div は単に id="tab-cars", id="tab-trucks" を持っています... 'tab-' 部分を取り除き、それを URL ハッシュに入れます。

var name = ui.panel.id.substr(4);
location.hash = '#'+name;
于 2010-12-14T13:52:24.717 に答える