2012-08-10 26 views
5

Entonces, desde la página de inicio, tengo un enlace que va a la página de listado de productos. La página del producto tiene divisiones expandibles/contraídas.jQuery if url hash, haga clic en evento/activar javascript

Necesito el div apropiado para expandir dependiendo de lo que es el url #.

Así el enlace en la página principal es

<a href="/out-products.php#healthysnacks">healthy snacks</a> 

cuando hago clic en el enlace de arriba, estoy tratando de activar esta, en la página del producto:

<a href="javascript:ReverseDisplay('products4')" id="healthysnacks"> Healthy Snacks</a> 

He intentado algunas de los otros códigos que encontré que activan el clic comprobando la etiqueta hash y ninguno de ellos funcionaban correctamente, creo que es por la función ReverseDisplay js. Por favor, cualquier idea ayudaría.

gracias

Respuesta

6

Puede realizar los siguientes cambios en la función de documento preparado de la página del producto:

solución sencilla: Desde el id-selector de jQuery es #elementId, sólo tiene que utilizar el valor window.location.hash como su selector de ID, y lo utilizan para orientar el elemento deseado.

if (window.location.hash) { 
    $(window.location.hash).click(); //clicks on element specified by hash 
} 

Mejor: Además de lo anterior, tome el js fuera de su margen de beneficio.

$('#healthysnacks').click(function(e) { 
    e.preventDefault(); 
    ReverseDisplay('products4'); 
}); 

Entonces, después de hacer esto , utilice el código $(window.location.hash).click() desde arriba. Además, cambiar su enlace a:

<a href="#" id="healthysnacks"> Healthy Snacks</a> 
+0

@raminson 'window.location.hash' da una cadena, en este caso que contiene '#healthysnacks', por lo que funciona como un selector de id. Probablemente debería aclarar eso en la publicación, gracias – nbrooks

+0

Sí, está en lo correcto, había olvidado que la propiedad de hash también devuelve el signo #. – undefined

+0

no funciona: \ –

3

Puede utilizar la propiedad hash del objeto Location, intente lo siguiente:

$(document).ready(function(){ 
    var id = window.location.hash; 
    $(id).trigger('click') 
}) 

Como está utilizando jQuery en lugar de utilizar javascript: protocolo, puede utilizar el método jQuery click:

$('#healthysnacks').click(function() { 
    // do something here 
}) 
+1

+1 a usted también, la misma idea lol – nbrooks

+0

buena solución, funciona perfecto para mi configuración. ¿Hay algún defecto de seguridad probable asociado con esto?en algún otro lugar vi alguna desinfección con expresiones regex para este tipo de uso. – cukabeka

3

Las respuestas sugeridas aquí son válidas, pero ...

Tenga mucho cuidado al utilizar el window.location.hash como lo es en un selector de jQuery porque este podría conducir a una vulnerabilidad XSS. $() también puede crear un elemento HTML y con un valor hash cuidadosamente construido, alguien podría ejecutar código JavaScript arbitrario.

Por ejemplo

http://my-website.com/about#'><img src=x onerror=alert(/XSSed/)>

Si la página my-websites.com/about utiliza el window.location.hash dentro de un selector de jQuery, que onerror código podría terminar siendo ejecutados.

Cuestiones relacionadas