Sự khác biệt chính xác giữa thuộc tính currentTarget và thuộc tính đích trong javascript là gì


289

Ai đó có thể vui lòng cho tôi biết sự khác biệt chính xác giữa currentTargettargetthuộc tính trong các sự kiện Javascript với ví dụ và thuộc tính nào được sử dụng trong kịch bản nào không?


Đặc biệt quan trọng của nó khiến một số trình duyệt có các cách tiếp cận khác nhau, ví dụ: nếu bạn nghe một sự kiện sao chép div, trong FF bạn sẽ nhận được một textNode thay vì một phần tử, nhưng trình nghe sẽ ở mức div.
Nikos

Câu trả lời:


401

Về cơ bản, bong bóng sự kiện theo mặc định, do đó, sự khác biệt giữa hai là:

  • target là yếu tố kích hoạt sự kiện (ví dụ: người dùng nhấp vào)
  • currentTarget là yếu tố mà người nghe sự kiện được gắn vào.

Xem một lời giải thích đơn giản trên bài đăng blog này .


111
mục tiêu = yếu tố kích hoạt sự kiện; currentTarget = phần tử lắng nghe sự kiện.
markmarijnissen

2
@markmarijnissen Bạn chắc chắn nên đưa nhận xét của mình làm câu trả lời vì nó hữu ích hơn câu trả lời ở trên và cũng được bình chọn nhiều hơn!
Andrea

Bạn có thể vui lòng cập nhật câu trả lời của bạn cho mỗi bình luận này không
Rahil Wazir

nghĩ về currentTarget là "chỉ
địnhTarget

Nó không phải luôn luôn là một yếu tố. ví dụXMLHttpRequest
KNU

77

target = yếu tố kích hoạt sự kiện.

currentTarget = phần tử có người nghe sự kiện.


3
Các yếu tố bắn một sự kiện, họ không nghe nó. Chúng tôi chỉ phân công xử lý để thực hiện nó, khi nó xảy ra. currentTarget là một trong đó trình xử lý sự kiện được đính kèm.
Samyak Jain

23

Ví dụ runnable tối thiểu

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>

Nếu bạn nhấp vào:

2 click me as well

sau đó 1lắng nghe nó và thêm vào kết quả:

target: 2
currentTarget: 1

bởi vì trong trường hợp đó:

  • 2 là yếu tố khởi nguồn sự kiện
  • 1 là yếu tố lắng nghe sự kiện

Nếu bạn nhấp vào:

1 click me

thay vào đó, kết quả là:

target: 1
currentTarget: 1

Đã thử nghiệm trên Chromium 71.


18

Nếu điều này không dính, hãy thử điều này:

hiện tại currentTargetđề cập đến hiện tại. Đó là mục tiêu gần đây nhất bắt được sự kiện nổi lên từ nơi khác.


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>

Nếu nhấp vào thẻ P trong mã ở trên thì bạn sẽ nhận được ba cảnh báo và nếu bạn nhấp vào thẻ div, bạn sẽ nhận được hai cảnh báo và một cảnh báo khi nhấp vào thẻ biểu mẫu. Và bây giờ hãy xem đoạn mã sau,

<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>
Chúng tôi vừa xóa onclick khỏi thẻ P và biểu mẫu và bây giờ khi chúng tôi nhấp vào thẻ P, chúng tôi chỉ nhận được một cảnh báo:

[đối tượng HTMLPar ĐoạnEuity] [đối tượng HTMLDivEuity]

Ở đây event.target là [object HTMLPar ĐoạnEuity] và event.curentTarget là [object HTMLDivEuity]: Vì vậy

event.target là nút mà từ đó sự kiện bắt nguồn và event.civerseTarget, ngược lại, đề cập đến nút mà trình nghe sự kiện hiện tại được đính kèm. Để biết thêm xem bong bóng

Ở đây chúng tôi đã nhấp vào thẻ P nhưng chúng tôi không có trình nghe trên P nhưng trên phần tử cha của nó.


2

event.target là nút mà từ đó sự kiện bắt nguồn, nghĩa là. bất cứ nơi nào bạn đặt trình nghe sự kiện của bạn (trên đoạn văn hoặc nhịp), event.target đề cập đến nút (nơi người dùng nhấp vào).

Ngược lại , event.cienTarget đề cập đến nút mà trình nghe sự kiện hiện tại được đính kèm. I E. nếu chúng tôi đính kèm trình lắng nghe sự kiện của chúng tôi vào nút đoạn, thì event.cienTarget đề cập đến đoạn trong khi event.target vẫn đề cập đến span. Lưu ý: rằng nếu chúng ta cũng có một trình lắng nghe sự kiện trên cơ thể, thì đối với trình lắng nghe sự kiện này, event.cienTarget đề cập đến phần thân (tức là sự kiện được cung cấp làm đầu vào cho trình liệt kê sự kiện được cập nhật mỗi khi sự kiện nổi lên một nút).


Đối với bất cứ ai truy cập trang này, câu trả lời này là không chính xác !! Kiểm tra câu trả lời được chấp nhận! Điều này nên được đưa vào quên lãng. BoulevardateTarget là nút liên quan đến nơi sự kiện được đính kèm.
LittleTreeX
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.