В чем разница между target и currentTarget в Javascript? [Дубликат]

Использовать двойные кавычки:

$i = 1;
echo "
<p class=\"paragraph$i\">
</p>
";
++i;
133
задан Chris W. 19 January 2016 в 00:13
поделиться

6 ответов

По сути, события bubble по умолчанию, поэтому разница между ними:

  • target - это элемент, который вызвал событие (например, пользователь нажал on)
  • currentTarget - это элемент, к которому подключен прослушиватель событий.

См. простое объяснение в этом сообщении в блоге .

186
ответ дан John Mee 16 August 2018 в 01:45
поделиться
  • 1
    target = элемент, вызвавший событие; currentTarget = элемент, который прослушивает событие. – markmarijnissen 14 August 2014 в 18:27
  • 2
    @markmarijnissen Вы должны обязательно поместить свой комментарий в качестве ответа, потому что он более полезен, чем ответ выше и более проголосовали также! – Andrea 9 December 2015 в 18:11
  • 3
    Не могли бы вы обновить свой ответ на этот комментарий – Rahil Wazir 24 December 2015 в 13:28
  • 4
    думать о currentTarget как "указанный Target" – craigmichaelmartin 13 July 2016 в 15:54
  • 5
    Это не всегда элемент. например XMLHttpRequest – Knu 28 July 2018 в 18:33

Минимальный пример

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
  <div id="2">2
  </div>
</div>
<div id="result">
  <div>result:</div>
</div>

Когда клик по 2 и отображается на 1, результат:

target: 2
currentTarget: 1

, потому что в этом случае:

  • 2 - это элемент, который инициировал событие
  • 1 - это элемент, который прослушивал к событию
10
ответ дан Ciro Santilli 新疆改造中心 六四事件 法轮功 16 August 2018 в 01:45
поделиться

target = элемент, который вызвал событие.

currentTarget = элемент, который прослушивает событие.

31
ответ дан markmarijnissen 16 August 2018 в 01:45
поделиться

<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>
Мы просто удалили onclick из тега P и формы, и теперь, когда мы нажимаем на тег P, мы получаем только одно предупреждение:

[object HTMLParagraphElement] [object HTMLDivElement]

Здесь event.target является [объектом HTMLParagraphElement], а event.curentTarget - [object HTMLDivElement]: Таким образом

event.target - это узел, с которого возникло событие, а event.currentTarget, напротив, относится к узлу, на котором был подключен приемник текущего события. Чтобы узнать больше , см. bubbling

Здесь мы нажали на тег P, но у нас нет слушателя на P, а на его родительском элементе div.

2
ответ дан Somesh Sharma 16 August 2018 в 01:45
поделиться

Если это не прилипает, попробуйте следующее:

ток в currentTarget относится к настоящему. Это самая последняя цель, которая поймала событие, которое появилось в другом месте.

6
ответ дан user1164937 16 August 2018 в 01:45
поделиться

event.target - это узел, с которого произошло событие, т. е. везде, где вы размещаете прослушиватель событий (по абзацу или диапазону), event.target ссылается на узел (где пользователь нажал).

event.currentTarget, напротив, относится к узлу, на котором прослушиватель текущего события был прикреплен. То есть. если мы привязали наш прослушиватель событий к узлу абзаца, тогда event.currentTarget ссылается на абзац, а event.target все еще ссылается на span. Обратите внимание: если у нас также есть прослушиватель событий в теле, то для этого event-listener event.currentTarget относится к телу (т. Е. Событие, предоставляемое в качестве входных данных для событий-листеров, обновляется каждый раз, когда событие пузырится на один узел вверх).

1
ответ дан YogeshBagdawat 16 August 2018 в 01:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: