jquery .click redéfinit l’ancre href quand je ne le veux pas!

J’ai un ensemble de DIV nestedes qui slidetoggle en utilisant jQuery lorsque l’utilisateur clique dessus. À l’intérieur de la DIV la plus interne, il y a une balise anchor avec un HREF qui devrait naviguer quelque part. Le problème est que lorsque je clique sur le lien, celui-ci se glisse de la même manière que les DIVs au lieu de naviguer vers l’URL. Si je clique avec le bouton droit sur l’ancre et que je sélectionne Ouvrir dans un nouvel onglet, la navigation est correcte. S’il vous plaît pouvez-vous repérer ce qui ne va pas? Merci

  • ThirdParty

    Bobs shop

     Gifts

  • $("div.subSystemHeader, div.subSystemHeader").click(function() { $("> div", this).slideToggle(...); return false; });

    Quelques modifications ici, inutile de répéter le même sélecteur et de vérifier que l’événement ne provient pas d’une balise , comme celle-ci:

     $("div.subSystemHeader").click(function(e) { if(e.target.nodeName == 'A') return; //skip this handler, don't return false $("> div", this).slideToggle(...); return false; }); 

    Vous pouvez le tester ici . Si la cible de l’événement provenait du (il n’y a pas d’enfant), nous quittons simplement le gestionnaire, en retournant un caractère undefined , puisque nous ne renvoyons pas explicitement false l’événement click fera de manière normale … aller au href .

    vous pouvez vérifier l’object événement du clic, puis la cible de l’événement – voir aussi http://api.jquery.com/event.target/

      $("div.subSystemHeader, div.subSystemHeader").click(function(event) { if(event.target.nodeName.toLowerCase() == 'a') return; ... } 

    (je ne l’ai pas testé, mais cela devrait fonctionner)

    Votre problème est return false; qui bloque le comportement par défaut.

     $("a:eq(0)").click(function() { return false; /* does nothing */ }); $("a:eq(1)").click(function() { /* go to href */ }); 
    • Exemple sur jsFiddle

    Je viens de tomber sur ce problème aujourd’hui. J’ai trouvé un article très intéressant qui pourrait aider. Il décrit l’utilisation (entre) des événements ‘return false’ et Jquery ( http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/ ). Je n’ai pas testé le code suivant sur votre exemple, mais je pense que cela devrait fonctionner.

     $('.subSystemHeader a').click(function(e){ e.stopPropagation(); });