Tengo un conjunto de archivos DIV nesteds que se deslizan con jQuery mientras el usuario hace clic en ellos. Dentro del DIV más interno hay una etiqueta de anclaje con un HREF que debe navegar en algún lugar. El problema es que cuando hago clic en el enlace se desliza como el DIV principal en lugar de navegar a la URL. Si hago clic con el botón derecho en el ancla y selecciono abrir en una nueva pestaña, entonces eso se desplaza bien. Por favor, ¿puedes ver qué está mal? Gracias
ThirdParty
Bobs shop
Gifts
$("div.subSystemHeader, div.subSystemHeader").click(function() { $("> div", this).slideToggle(...); return false; });
Algunos cambios aquí, no hay necesidad de repetir el mismo selector, y verificar que el evento no provenga de una etiqueta , como esta:
$("div.subSystemHeader").click(function(e) { if(e.target.nodeName == 'A') return; //skip this handler, don't return false $("> div", this).slideToggle(...); return false; });
Puedes probarlo aquí . Si el objective del evento era de la (no hay elementos secundarios), simplemente salimos del controlador, devolviéndonos
undefined
, ya que no estamos devolviendo explícitamente false
el evento click
hará lo normal … ir a la href
.
puede verificar el objeto de evento del clic y luego verificar el objective del evento; consulte también http://api.jquery.com/event.target/
$("div.subSystemHeader, div.subSystemHeader").click(function(event) { if(event.target.nodeName.toLowerCase() == 'a') return; ... }
(No lo probé, pero debería funcionar)
Tu problema es return false;
que está bloqueando el comportamiento por defecto.
$("a:eq(0)").click(function() { return false; /* does nothing */ }); $("a:eq(1)").click(function() { /* go to href */ });
Acabo de encontrar este problema hoy. Encontré un artículo muy interesante que podría ayudar. Describe el error (uso) de los eventos ‘return false’ y Jquery ( http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/ ). No he probado el siguiente código en su ejemplo, pero creo que esto debería funcionar.
$('.subSystemHeader a').click(function(e){ e.stopPropagation(); });