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