Różnica między E. target a e. currentTarget

Nie rozumiem różnicy, obie wydają się takie same, ale chyba nie są.

Wszelkie przykłady, kiedy użyć jednego lub drugiego byłyby mile widziane.

Author: Artemix, 2011-05-07

10 answers

[10]} Ben ma całkowitą rację w swojej odpowiedzi - więc miej to, co mówi w umyśle. To, co ci zaraz powiem, nie jest pełnym wyjaśnieniem, ale to bardzo łatwy sposób na przypomnienie sobie, jak e.target, e.currentTarget Praca w odniesieniu do zdarzeń myszy i listy wyświetlanych:

e.target = rzecz pod myszką (jak mówi ben... rzecz, która wywołuje zdarzenie). e.currentTarget = rzecz przed kropką... (patrz niżej)

Więc jeśli masz 10 przycisków wewnątrz klipu z nazwą instancji "btns" i do:

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 będzie jednym z 10 przycisków i e.currentTarget będzie zawsze klipem "btns".

Warto zauważyć, że jeśli zmienisz MouseEvent na ROLL_OVER lub ustawisz właściwość btns.mouseChildren NA false, e.target i e.currentTarget będą zawsze "btns".

 213
Author: Zevan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-26 09:00:33

e.target jest tym, co uruchamia dyspozytor zdarzeń, a e.currentTarget jest tym, do czego przypisałeś słuchacza.

 446
Author: Ben Gale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-18 01:40:01

e.currentTarget jest zawsze elementem zdarzenia jest rzeczywiście związane zrobić. {[1] } jest elementem, z którego zdarzenie pochodzi, więc e.target może być potomkiem e.currentTarget lub {[1] } może być = = = e.currentTarget, w zależności od struktury znaczników.

 28
Author: Alex K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-23 17:52:10

Lubię wizualne odpowiedzi.

Tutaj wpisz opis obrazka

Po kliknięciu #btn wywoływane są dwie procedury obsługi zdarzeń, które wyświetlają to, co widzisz na zdjęciu.

Demo tutaj: https://jsfiddle.net/ujhe1key/

 28
Author: Maria Ines Parnisari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-22 01:26:14

Warto zwrócić uwagę na to wydarzenie.cel może być przydatny, na przykład, do użycia pojedynczego słuchacza do wyzwalania różnych działań. Załóżmy, że masz typowy sprite "menu" z 10 przyciskami w środku, więc zamiast robić:

menu.button1.addEventListener(MouseEvent.CLICK, doAction1);
menu.button2.addEventListener(MouseEvent.CLICK, doAction2);
etc...

Możesz po prostu zrobić:

menu.addEventListener(MouseEvent.CLICK, doAction);

I uruchamia inną akcję wewnątrz doaction (event) w zależności od zdarzenia.target (używając jego właściwości name, itp...)

 8
Author: Cay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-07 19:02:05

Podaj przykład:

var body = document.body,
    btn = document.getElementById( 'id' );
body.addEventListener( 'click', function( event ) {
    console.log( event.currentTarget === body );
    console.log( event.target === btn );
}, false );

Po kliknięciu 'btn', pojawią się 'true' i 'true'!

 5
Author: Yuan Zhaohao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-05 09:37:14
target  is the element that triggered the event (e.g., the user clicked on)

currenttarget is the element that the event listener is attached to.
 4
Author: Muthukrishnan Kandasamy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-14 11:50:14

E. currentTarget zawsze zwróci komponent, do którego zostanie dodany detektor zdarzeń.

Z drugiej strony, e.celem może być sam komponent lub dowolne bezpośrednie dziecko lub wnuk lub wnuk i tak dalej, kto otrzymał Zdarzenie. Innymi słowy, e.target zwraca komponent, który znajduje się na górze w hierarchii listy wyświetlanych I musi znajdować się w hierarchii podrzędnej lub sam komponent.

Jedno użycie może być, gdy masz kilka obrazów w płótnie i chcesz przeciągnąć obrazy wewnątrz komponentu, ale Canvas. Możesz dodać słuchacza na płótnie i w tym słuchaczu możesz napisać następujący kod, aby upewnić się, że płótno nie zostanie przeciągnięte.

function dragImageOnly(e:MouseEvent):void
{
    if(e.target==e.currentTarget)
    {
        return;
     }
     else
     {
        Image(e.target).startDrag();
     }
}
 3
Author: Asad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-14 06:21:42
  • e.target to element, który np. klikasz
  • e.currentTarget jest elementem z dodanym detektorem zdarzeń.

Jeśli klikniesz na element potomny przycisku, lepiej jest użyć currentTarget do wykrywania atrybutów przycisków, w CH czasami problem z użyciem e. target.

 2
Author: Marcel GJS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-29 11:53:15

E. currentTarget to element (rodzic), do którego jest rejestrowane zdarzenie, e.target to node(children), do którego wskazuje Zdarzenie.

 0
Author: Samyak Jain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-18 11:31:25