2010-08-17 17 views
11

Tengo una página con una interfaz con pestañas. Cada pestaña tiene una identificación única. He habilitado enlaces que apuntan a esa página con el id. Adjunto después del hash, y ahora estoy tratando de eludir el comportamiento predeterminado del navegador que abre una URL con hash en la ubicación del elemento en la página.Evitar el comportamiento predeterminado de hash en la página carga

Así:

  • enlaces páginaA a la página B como esto: abre <a href="pageB.php#Tab4">Go</a>
  • páginaB, y mi jQuery activa la ficha correcta, pero el navegador se haya desplazado hacia abajo, donde <div id="Tab4"> se encuentra en la página.

Eso es exactamente lo que quiero evitar.

¿Alguna idea? Gracias!

Respuesta

43

No hay una manera de evitar el comportamiento hash predeterminado, pero puede modificar su esquema de hash para que la etiqueta # no se corresponda con ninguna ID en su página. En la carga de la página, tome el valor hash y agregue una constante (por ejemplo, _hash), luego desplácese a esa usando jQuery.

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

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

al cargar la página, obtener el div haciendo tab4 + _hash

+1

Esa es la idea perfecta, justo lo que estaba buscando. ¡Gracias! – bobsoap

+0

Hackish pero lo que estaba buscando! y es estúpido que no pensé en algo tan obvio. ¡Gracias! –

+1

Con html5 también puede usar algo como data-target o data-hash para seleccionar el elemento/div. – nabrown78

1

Después de terminar de cargar la pestaña derecha, ejecute lo siguiente:

window.location = '#'; 
+0

no lo he probado, pero ... ¿no se desliza hacia abajo y luego hacia arriba? – nico

+0

Probado, funciona muy bien en navegadores webkit pero falló en FF. No lo he probado en IE. Te dejaré saber lo que descubro. –

3

Yo usaría esto:

window.scrollTo(0,0); 

De esta forma no es necesario cambiar los identificadores de elementos o cualquier otra cosa.

Me encontré con el problema donde quería desplazarme hacia abajo a la pestaña, pero por alguna razón se desplazó más allá de ella hasta la parte inferior de la página (no, no había una identificación duplicada). Creo que es porque el navegador se desplazaría a la identificación antes de que el contenido terminara de cargarse, y el contenido extra empujó al elemento sobre la nueva posición de desplazamiento). Lo arreglé con esto:

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

el "if" aquí es obligatoria o lo que podría tener un bucle infinito

Cuestiones relacionadas