316 votes

Différence entre e.target et e.currentTarget

Je ne comprends pas la différence, ils semblent tous les deux pareils mais je suppose qu'ils ne le sont pas.

Des exemples de quand utiliser l'un ou l'autre seraient appréciés.

476voto

Ben Gale Points 1394

e.Target est ce qui déclenche le répartiteur d’événements pour déclencher et e.currentTarget est ce que vous avez assigné votre auditeur.

225voto

Zevan Points 5275

Ben c'est tout à fait correct dans sa réponse, alors conservez ce qu'il dit dans l'esprit. Ce que je vais vous dire n'est pas une explication complète, mais c'est un moyen très facile de se rappeler comment e.target, e.currentTarget travail en relation avec les événements de la souris et de la liste d'affichage:

e.target = La chose en vertu de la souris (comme ben dit... la chose qui déclenche l'événement). e.currentTarget = La chose avant de la dot... (voir ci-dessous)

Donc, si vous avez 10 boutons à l'intérieur d'un élément avec un nom d'instance de "btns" et que vous faites:

btns.addEventListener(MouseEvent.MOUSE_OVER, onOver);
// btns = the thing before the dot of an addEventListener call
function onOver(e:MouseEvent):void{
  trace(e.target.name, e.currentTarget.name);
}

e.target sera l'un des 10 boutons et e.currentTarget sera toujours le "btns" clip.

Il est intéressant de noter que si vous avez modifié le MouseEvent à un ROLL_OVER ou définir la propriété btns.mouseChildren false, e.target et e.currentTarget permettra à la fois d'être toujours "btns".

MODIFIER

Pour plus d'info buter les événements, j'ai écrit ce blog quelques années en arrière, aide, si vous voulez comprendre la formation de bulles, la phase de capture etc:

http://www.learningactionscript3.com/2007/11/10/event-phases-in-action/

30voto

Alex Kinnee Points 1638

est toujours l’élément, l’événement est lié en fait faire.est l’élément de l’événement originaire, donc pourrait être un enfant de , ou pourrait être === , selon comment votre balisage structuré.

8voto

Cay Points 3470

Il est à noter que event.target peut être utile, par exemple, pour utiliser un seul écouteur pour déclencher des actions différentes. Disons que vous avez le sprite typique « menu » avec 10 boutons à l’intérieur, donc au lieu de faire :

Vous pouvez tout simplement faire :

Et déclencher une action différente au sein de la doAction(event) selon la event.target (à l’aide de sa propriété name, etc....)

3voto

Asad Points 506

e.currentTarget serait toujours le retour de la pièce sur laquelle l'écouteur d'événement est ajouté.

D'autre part, l'e.la cible peut être le composant lui-même ou tout enfant ou grand enfant ou grand-grand-enfant et ainsi de suite qui a reçu l'événement. En d'autres termes, l'e.cible renvoie le composant qui est sur le haut dans la Liste d'Affichage de la hiérarchie et doit être dans la hiérarchie enfant ou le composant lui-même.

Une utilisation peut-être quand vous avez plusieurs Images en Toile et vous souhaitez le faire glisser les Images à l'intérieur du composant, mais la Toile. Vous pouvez ajouter un listener sur la Toile et dans celui de l'écouteur vous pouvez écrire le code suivant pour vous assurer que la Toile n'aurais pas traîné.

function dragImageOnly(e:MouseEvent):void
{
    if(e.target==e.currentTarget)
    {
        return;
     }
     else
     {
        Image(e.target).startDrag();
     }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X