JQuery event.stopPropagation () ne fonctionne pas
Dans mon html j'ai un span de classe dragHandle intégré au sein d'un li.
<div class='treeView'>
<ul class='tree'>
<li><span class="dragHandle"></span>Item 1
<ul>
<li><span class="dragHandle"></span>Item 2 <a href="#">link</a></li>
</ul>
</li>
</ul>
- Je joindre des gestionnaires d'événement à l'aide de jQuery comme suit:
$(".tree li").click(function(event) {
alert("click");
event.stopPropagation();
});
$(".dragHandle").mousedown(function(event) {
alert("down");
event.stopPropagation();
});
$(".dragHandle").mouseup(function(event) {
alert("Up");
event.stopPropagation();
});
Quand je mousedown et de la souris sur l'élément que je reçois le bas et le haut, alertes, cependant j'ai aussi le clic d'alerte de la batterie au lithium du gestionnaire d'événement. Je pense qu'il devrait être empêché par l'appel à la manifestation.stopPropagation dans les événements mousedown et mouseup gestionnaires. Comment puis-je arrêter l'événement click d'être appelé pour mousedown/événements sur le dragHandle?
TIA,
Adam
source d'informationauteur apchester | 2009-07-26
Vous devez vous connecter pour publier un commentaire.
Vous capture... et de manger... que événement:
La clé ici est que
click
mousedown
etmouseup
sont des événements distincts. Bien que vous pourriez penser à unclick
comme étant unmousedown
suivie par unmouseup
en réalité, vous pourriez avoirclick
événements déclenchés par l'utilisateur des actions qui ne sont même pas impliquer la souris, ainsi que des combinaisons demousedown
etmouseup
qui n'étaient pas le résultat en toutclick
des manifestations à tous.Vous pouvez créer un simple wrapper-"classe", qui conserve la trace de la souris vers le bas et d'événements:
Cela crée une fermeture et délègue la gestion des événements de la DragDropHandler-objet. Notez que j'ai utilisé la fonction.l'appel (le premier paramètre est le contexte) pour s'assurer que ce se réfère à la DragDropHandler-objet à l'intérieur de ses méthodes. Depuis, nous avons créé une fonction anonyme qui ne peut pas être atteint à partir de l'espace mondial, je pense qu'il est acceptable d'utiliser la DragDropHandler de référence à l'intérieur de l'emballage des gestionnaires d'événements.