Comment arrêter la propagation de l'évènement de l'intérieur d'une ancre de l'attribut href, sans utiliser onclick ou onmousedown
En raison des restrictions, même si c'est quelque chose que j'ai à éviter, dans une certaine situation, j'ai utiliser du javascript: syntaxe dans un attribut href de l'acor tag.
(EXPLICATION: Dans mon CMS-je utiliser un éditeur de texte enrichi pour permettre à l'utilisateur d'apporter des modifications à des éléments de texte, y compris des liens. Dans certains cas spécifiques javascript: les appels sont nécessaires et je m'interdit onclick complètement à partir du lien de fonctionnalités d'édition (pour simplifier le processus pour l'utilisateur). Cependant, comme l'un des maillons apparaît dans un bloc qui réagit à un événement onclick, la chose double-le-feu)
Comme ceci:
<a href="javascript:doSomething()"></a>
Mon problème est que ce lien est à l'intérieur d'un conteneur déjà réagit à un événement onclick. J'ai donc voulu passer de l'objet événement ainsi que de la méthode doSomething (), pour que je puisse ensuite utiliser jQuery
event.stopPropagation()
méthode.
Mais, malheureusement, il semble que la transmission de l'objet d'événement le long de
<a href="javascript:doSomething(event)"></a>
ne semble pas fonctionner du tout. Safari ne rien dire alors que Firefox rapport ReferenceError: l'événement n'est pas défini
Je suppose que c'est le cas car href="" n'est pas un script initier attribut (onclick). Le problème est que dans cette situation, je ne vais pas être en mesure d'accéder à la balise au-delà de ce que je fais déjà.
Donc j'ai besoin de
1.) Un moyen de passer de l'objet d'événement pour la doSomething() fonction dans l'attribut href
ou
2.) Une façon d'arrêter la propagation de l'évènement droit d'ancrage (après son cliqué) par d'autres moyens.
Merci pour tout commentaires constructifs!
doSomething
à la click
gestionnaire d'événement?La situation nécessite d'être manipulé uniquement par ce qu'il est possible à l'aide de l'attribut href.
Je vais prendre votre parole.
Si vous pouviez partager pourquoi vous devez utiliser l'attribut href, il peut suggérer des solutions de contournement possibles.
Vous avez raison. Je vais modifier la question.
OriginalL'auteur SquareCat | 2012-10-12
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas arrêter la propagation de l'évènement de la
href
attribut parce qu':Lorsque le
href
code s'exécute, il n'est pas un événement. Il a juste exécute ce code, similaire à l'emplacement "hack". Comme entrer dansjavascript:doSomething()
dans la barre d'adresse du navigateur.Href code s'exécute après les événements feu sur le lien -- y compris la garniture bouillonne.
Vous pouvez voir que le comportement dans cette jsFiddle. Notez que
mouseup
,mousedown
, etclick
de feu à la fois pour le lien, et sur le conteneur lorsque le lien est cliqué, avant lahref
code s'exécute.Si il y a des écouteurs d'événement que vous souhaitez bloquer, vous devrez trouver un autre moyen.
Mais, si vous pouvez ajouter le javascript pour le document vous pouvez bloquer l'
href
à l'aide depreventDefault()
.Par exemple:
jQuery, avant la version 1.7:
jQuery 1.7 et plus tard:
ou (mieux):
Vous pouvez voilà la dernière version live à jsFiddle.
Vous êtes les bienvenus; heureux de vous aider!
Vous pouvez arrêter href propagation: jsfiddle.net/QE8zt/19
vous avez raison, mais s'il vous plaît lisez la question et de ses commentaires. L'OP précise:
"The situation requires it to be handled purely by what is possible using the href attribute."
. Mais depuis l'après-jQuery méthode pourrait aider les autres, je l'ai ajouté à cette réponse.OriginalL'auteur Brock Adams
Si vous ne pouvez pas modifier le lien lui-même (à utiliser onclick), alors votre seule option est de modifier le onclick gestionnaire du conteneur.
Pouvez-vous faire quelque chose comme
OriginalL'auteur Peter Wilkinson
Bien, c'est une vieille question, mais dans mon cas particulier, j'ai trouvé un hack autour d'elle, mais elle ne peut s'appliquer qu'à un sous-ensemble de situations. J'ai un div qui a un onclick. Mais si l'intérieur de ce div est cliqué, je ne veux pas que div onclick du feu. Voici ce que je fais:
J'ai appris à propos de l'queryselector astuce ici: https://stackoverflow.com/a/14800287/2295722
OriginalL'auteur wessel
Je ne sais pas si il existe un moyen d'obtenir les arguments si vous écrivez votre code javascript dans l'attribut href. Mais vous pouvez l'obtenir comme suit dans le onclick, mais comme tu dis ce n'est pas la meilleure pratique:
dans le tableau arguments que vous aurez votre objet événement.
voici une démo pour vous:
http://jsfiddle.net/tEw5J/1/
OriginalL'auteur Sinan