jquery .click anulando el ancla href cuando no quiero que lo haga!

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 */ }); 
    • Ejemplo en jsFiddle

    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(); });