e.target과 e.currentTarget의 차이점


276

나는 그 차이를 이해하지 못한다. 둘 다 동일하게 보이지만 그렇지 않다고 생각한다.

어느 쪽을 사용할 것인지에 대한 모든 예가 이해 될 것이다.


2
바이올린 은 그 차이를 매우 명확하게 보여줍니다
Murhaf Sousli

1
누구나 이벤트가 DOM 이벤트와 동일하게 동작하는지 확인할 수있을만큼 ActionScript3를 잘 알고 있습니까?
벤 Creasy


Murhaf Sousli가 제공하는 참조는 차이점이 무엇인지에 대한 질문에 대한 명확한 설명입니다. 이 바이올린의 간단한 버전이 가장 적합합니다.
azakgaim

답변:


204

벤은 자신의 대답이 완전히 정확하므로 자신이 말하는 것을 명심하십시오. 내가 당신에게에 대해이야하는 것은 자세한 설명은 아니지만, 어떻게 기억하는 아주 쉬운 방법 e.target, e.currentTarget작업 마우스 이벤트 및 표시 목록과 관련을 :

e.target= 마우스 아래에있는 것 (벤이 말한 것처럼 ... 이벤트를 유발하는 것). e.currentTarget= 점 앞에있는 것 ... (아래 참조)

따라서 인스턴스 이름이 "btns"인 클립 안에 10 개의 버튼이 있고

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버튼 10 개 중 하나이며 e.currentTarget항상 "btns"클립이됩니다.

그것의 가치가 지적 당신은 ROLL_OVER로 된 MouseEvent를 변경하거나 속성을 설정하면 btns.mouseChildrenfalse로, e.target그리고 e.currentTarget모두 항상 "btns"입니다.


2
즉, 대상은 자식이고 currentTarget은 컨테이너입니다.
Artemix

107
아니요, currentTarget항상 이벤트를 수신하는 객체입니다. target이벤트를받은 실제 대상입니다. 이벤트 버블 링 당 대상은 이벤트를 수신하고 표시 목록을 버블 링합니다. (또는 이벤트 캡처를위한 다른 방법 라운드)
찌를

4
이벤트를 전달한 어린이 인 경우 예 대상이 어린이입니다. 일반적으로 리스너를 할당 한 e.currentTarget을 사용하려고합니다. 그러나 여러 자녀가있는 컨테이너에서 하나의 리스너를 원하는 위에 나열된 Zevan과 같은 상황에서는 e.target을 사용하여 어떤 자녀가 이벤트를 발송했는지 확인합니다.
Ben Gale

위의 @poke의 의견은 가장 좋은 답변입니다. "currentTarget은 항상 객체 수신, 대상은 이벤트를 수신 한 실제 대상"
PandaWood


28

e.currentTarget항상 이벤트가 실제로 바인딩 된 요소입니다. e.target은 이벤트가 시작된 요소이므로 마크 업의 구조에 따라 e.target의 하위 요소 e.currentTarget이거나 e.target=== e.currentTarget일 수 있습니다 .



8

예를 들어, 단일 리스너를 사용하여 다른 작업을 트리거하는 경우 event.target이 유용 할 수 있습니다. 내부에 10 개의 버튼이있는 일반적인 "메뉴"스프라이트가 있다고 가정 해 봅시다.

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

간단하게 할 수 있습니다 :

menu.addEventListener(MouseEvent.CLICK, doAction);

그리고 event.target (이름 속성 등을 사용하여)에 따라 doAction (event) 내에서 다른 작업을 트리거하십시오.


5

예를 들어 보자.

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

'btn'을 클릭하면 'true'와 'true'가 나타납니다!


3

e.currentTarget은 항상 이벤트 리스너가 추가 된 구성 요소를 반환합니다.

반면, e.target은 구성 요소 자체 또는 직계 자녀 또는 손자 또는 손자 손자 등이 될 수 있습니다. 즉, e.target은 표시 목록 계층 구조에서 최상위에 있으며 하위 계층 구조 나 구성 요소 자체에 있어야하는 구성 요소를 반환합니다.

Canvas에 여러 이미지가 있고 구성 요소 내에서 이미지를 끌어다 놓을 때 한 가지 용도가 있습니다. Canvas에 리스너를 추가 할 수 있으며 해당 리스너에 Canvas가 드래그되지 않도록 다음 코드를 작성할 수 있습니다.

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

3
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.

2
  • e. 타겟은 요소입니다.
  • e.currentTarget은 이벤트 리스너가 추가 된 요소입니다.

버튼의 하위 요소를 클릭하면 currentTarget을 사용하여 버튼 속성을 감지하는 것이 좋습니다. CH에서는 때때로 e.target을 사용하는 데 문제가 있습니다.


0

e.currentTarget은 이벤트가 등록 된 요소 (부모)이고 e.target은 이벤트가 가리키는 노드 (자식)입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.