javascript에서 currentTarget 속성과 대상 속성의 정확한 차이점은 무엇입니까


289

누구나 Javascript 이벤트에서 속성 currentTargettarget속성 의 정확한 차이점 을 예를 들어 어떤 시나리오에서 어떤 속성이 사용되는지 알려주십시오 .


중요한 esp는 일부 브라우저마다 다른 접근 방식을 갖습니다. 예를 들어 div 복사 이벤트를 듣는 경우 FF에서 요소 대신 textNode를 얻지 만 리스너는 div 레벨에 있습니다.
Nikos

답변:


401

기본적으로 이벤트는 기본적으로 버블 링 되므로 두 가지의 차이점은 다음과 같습니다.

  • target 이벤트를 트리거 한 요소입니다 (예 : 사용자가 클릭 한 경우)
  • currentTarget 이벤트 리스너가 첨부 된 요소입니다.

블로그 게시물 에 대한 간단한 설명을 참조하십시오 .


111
대상 = 이벤트를 트리거 한 요소; currentTarget = 이벤트를 수신하는 요소입니다.
markmarijnissen

2
@markmarijnissen 위의 답변보다 더 유용하고 더 많은 투표를하기 때문에 귀하의 의견을 답변으로 반드시 입력해야합니다!
Andrea

당신은 당 당신의 대답 업데이트시겠습니까 이 댓글
Rahil 지르

currentTarget을 "specifiedTarget"으로 생각하십시오
craigmichaelmartin

항상 요소는 아닙니다. 예XMLHttpRequest
Knu

77

target = 이벤트를 트리거 한 요소

currentTarget = 이벤트 리스너가있는 요소


3
요소는 이벤트를 발생 시키지만 이벤트를 듣지 않습니다. 처리 할 때 처리기를 할당하기 만하면됩니다. currentTarget은 이벤트 핸들러가 첨부 된 항목입니다.
Samyak Jain 1

23

최소 실행 가능 예

window.onload = function() {
  var resultElem = document.getElementById('result')
  document.getElementById('1').addEventListener(
    'click',
    function(event) {
      resultElem.innerHTML += ('<div>target: ' + event.target.id + '</div>')
      resultElem.innerHTML += ('<div>currentTarget: ' + event.currentTarget.id + '</div>')
    },
    false
  )
  document.getElementById('2').dispatchEvent(
          new Event('click', { bubbles:true }))
}
<div id="1">1 click me
  <div id="2">2 click me as well</div>
</div>
<div id="result">
  <div>result:</div>
</div>

당신이 클릭하면 :

2 click me as well

그런 다음 1청취하고 결과에 추가합니다.

target: 2
currentTarget: 1

이 경우 :

  • 2 이벤트를 시작한 요소입니다.
  • 1 이벤트를 청취 한 요소입니다.

당신이 클릭하면 :

1 click me

대신 결과는 다음과 같습니다.

target: 1
currentTarget: 1

Chromium 71에서 테스트되었습니다.


18

이것이 고착되지 않으면 다음을 시도하십시오.

현재현재currentTarget나타냅니다. 다른 곳에서 발생한 사건을 포착 한 가장 최근의 목표입니다.


5

<style>
  body * {
    margin: 10px;
    border: 1px solid blue;
  }
</style>

<form onclick="alert('form')">FORM
  <div onclick="alert('div')">DIV
    <p onclick="alert('p')">P</p>
  </div>
</form>

위 코드에서 P 태그를 클릭하면 세 개의 경고가 표시되고 div 태그를 클릭하면 양식 태그를 클릭하면 두 개의 경고와 단일 경고가 표시됩니다. 이제 다음 코드를 참조하십시오.

<style>
  body * {
    margin: 10px;
    border: 1px solid blue;
  }
</style>
<script>
function fun(event){
  alert(event.target+" "+event.currentTarget);
}

</script>

<form>FORM
  <div onclick="fun(event)">DIV
    <p>P</p>
  </div>
</form>
우리는 방금 P와 양식 태그에서 onclick을 제거했으며 이제 P 태그를 클릭하면 경고가 하나만 나타납니다.

[개체 HTMLParagraphElement] [개체 HTMLDivElement]

여기서 event.target은 [object HTMLParagraphElement]이고 event.curentTarget은 [object HTMLDivElement]입니다.

event.target 이벤트가 시작된 노드 및 event.currentTarget는 반대측에 attached.To 더 알 된 현재 이벤트 리스너의 노드로 지칭 버블 볼

여기서는 P 태그를 클릭했지만 P에는 리스너가 없지만 부모 요소 div에는 리스너가 있습니다.


2

event.target 은 이벤트가 시작된 노드입니다 (예 : 이벤트 리스너 (문단 또는 범위)를 배치 할 때마다 event.target은 노드 (사용자가 클릭 한 위치)를 나타냅니다.

반대의 event.currentTarget 은 현재 이벤트 리스너가 연결된 노드를 나타냅니다. 즉. 이벤트 리스너를 단락 노드에 연결 한 경우 event.currentTarget은 단락을 참조하고 event.target은 여전히 ​​span을 나타냅니다. 참고 : body에 이벤트 리스너가있는 경우이 이벤트 리스너의 경우 event.currentTarget은 body를 참조합니다 (즉, 이벤트가 노드 하나를 버블 링 할 때마다 이벤트 리스너에 입력으로 제공된 이벤트가 업데이트 됨).


이 페이지를 방문하는 사람에게는이 답변이 잘못되었습니다! 수락 된 답변을 확인하십시오! 이 일은 망각으로 내려져야합니다. delegateTarget은 이벤트가 첨부 된 위치를 나타내는 노드입니다.
LittleTreeX
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.