2010-08-17 4 views
11

Ich habe eine Seite mit einer Schnittstelle mit Registerkarten. Jeder Tab hat eine eindeutige ID. Ich habe Links aktiviert, die auf diese Seite mit der angehängten ID nach dem Hash zeigen, und ich versuche nun, das Standardverhalten des Browsers zu umgehen, das eine URL mit Hash an der Position des Elements auf der Seite öffnet. SoVerhindern Standard-Hash-Verhalten beim Laden der Seite

:

  • pageA Links wie folgt SeiteB: <a href="pageB.php#Tab4">Go</a>
  • pageB öffnet, und meine jQuery aktiviert die richtigen Registerkarte, aber der Browser hat nach unten gescrollt, wo <div id="Tab4"> auf der Seite befindet.

Genau das möchte ich verhindern.

Irgendwelche Ideen? Danke!

Antwort

43

Es gibt keine Möglichkeit, das standardmäßige Hash-Verhalten zu verhindern. Sie können jedoch Ihr Hash-Schema ändern, damit das #Tag keiner ID auf Ihrer Seite entspricht. Nehmen Sie beim Laden der Seite den Hash-Wert und hängen Sie eine Konstante an (Beispiel: _hash), und blättern Sie dann mit jQuery dorthin.

Beispiel: http://mysite/page.php#tab4

page.php hat <div id="tab4_hash"></div>

Auf Seite zu laden, nutzen Sie die div, indem Sie tab4 + _hash

+1

, dass die perfekte Idee, genau das, was ich suchte. Vielen Dank! – bobsoap

+0

Hackish aber was ich gesucht habe! und es ist dumm, dass ich nicht an etwas so Offensichtliches denke. Vielen Dank! –

+1

Mit html5 könnten Sie auch etwas wie Datenziel oder Daten-Hash verwenden, um das Element/div auszuwählen. – nabrown78

1

Nachdem Sie die richtige Registerkarte fertig sind geladen, führen Sie dies:

window.location = '#'; 
+0

habe es nicht versucht aber ... würde das nicht runterscrollen und dann wieder hoch? – nico

+0

Getestet, funktioniert es gut auf Webkit-Browsern, aber fehlgeschlagen auf FF. Habe es nicht auf IE probiert. Ich werde dich wissen lassen, was ich herausgefunden habe. –

3

Ich würde dies verwenden:

window.scrollTo(0,0); 

Auf diese Weise müssen Sie Element-IDs oder etwas anderes nicht ändern.

Ich stieß auf das Problem, wo ich nach unten zu der Registerkarte scrollen wollte, aber aus irgendeinem Grund scrollte es bis zum Ende der Seite (nein, es gab keine doppelte ID). Ich denke, das liegt daran, dass der Browser zu der ID scrollt, bevor der Inhalt fertig geladen wurde und der zusätzliche Inhalt das Element über die neue Bildlaufposition geschoben hat. Ich reparierte es mit diesem:

if(document.location.hash) 
{ 
    window.location = document.location.hash; 
} 

die „if“ Anweisung hier obligatorisch ist oder Sie könnten eine Endlosschleife bekommen

Verwandte Themen