2010-08-17 18 views
11

Ho una pagina con un'interfaccia a schede. Ogni scheda ha un ID univoco. Ho attivato i link che puntano a quella pagina con l'id aggiunto dopo l'hash e ora sto cercando di eludere il comportamento predefinito del browser che apre un URL con hash nella posizione dell'elemento nella pagina.Previene il comportamento predefinito dell'hash sul caricamento della pagina

Quindi:

  • link Pagina A alla pagina B come questo: si apre <a href="pageB.php#Tab4">Go</a>
  • paginaB, e il mio jQuery attiva la scheda corretta, ma il browser ha fatto scorrere verso il basso dove <div id="Tab4"> si trova sulla pagina.

Questo è esattamente ciò che voglio impedire.

Qualche idea? Grazie!

risposta

43

Non esiste un modo per impedire il comportamento di hash predefinito, ma è possibile modificare lo schema di hash in modo che #tag non corrisponda a nessun ID sulla pagina. Al caricamento della pagina, prendi il valore hash e aggiungi una costante (es: _hash), quindi scorri fino a quella usando jQuery.

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

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

al caricamento della pagina, ottenere il div facendo tab4 + _hash

+1

Questa è l'idea perfetta, proprio quello che stavo cercando. Grazie! – bobsoap

+0

Hackish ma quello che stavo cercando! ed è stupido che non abbia pensato a qualcosa di ovvio. Grazie! –

+1

Con html5 puoi anche usare qualcosa come data-target o data-hash per selezionare l'elemento/div. – nabrown78

1

Dopo aver finito di caricare la scheda a destra, eseguire questo:

window.location = '#'; 
+0

non l'ho provato, ma ... non lo farò scorrere verso il basso e poi di nuovo? – nico

+0

Testato, funziona perfettamente sui browser webkit ma non funziona su FF. Non l'ho provato su IE. Ti farò sapere cosa scopro. –

3

Vorrei usare questo:

window.scrollTo(0,0); 

In questo modo non è necessario modificare l'ID dell'elemento o qualsiasi altra cosa.

Mi sono imbattuto nel problema in cui volevo scorrere verso il basso fino alla scheda, ma per qualche motivo lo scorreva in fondo alla pagina (no, non c'era un id duplicato). Penso che sia perché il browser scorreva fino all'ID prima che il contenuto finisse di caricare, e il contenuto extra spingeva l'elemento sopra la nuova posizione di scorrimento). Ho fissato con questo:

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

il "if" qui è obbligatorio o si potrebbe ottenere un loop infinito

Problemi correlati