почему this плодится?
Вложений: 1
Доброго времени суток,
вот есть такой код:
<div class = "div1">1</div>
<div class = "div2">2</div>
<div class = "div3">3</div>
<div class = "div4">4</div>
<select class = "select1">
<option>10</option>
<option>20</option>
<option>30</option>
<option>40</option>
</select>
document.querySelectorAll('[class^="div"]').forEach((elem) =>
{
elem.addEventListener('click', getIt);
});
function getIt()
{
let target = this;
document.getElementsByClassName('select1')[0].addEventListener('change', pasteC(target));
}
function pasteC(target)
{
return () =>
{
console.log(target.textContent);
}
}
Всё бы ничего, но вот никак не пойму почему плодиться this. Если прокликать по дивам, а потом что-то выбрать в селекте, то в консоле появиться всё что кликал. Почему так происходит? |
в JS this имеет динамическую природу и фактическое его значение определяется в момент фактического вызова функции.
|
atanov,
При каждом клике на div у вас добавляется слушатель события на селект. addEventListener не заменяет обработчик события, а добавляет новый. |
Белый шум, да, это я уже понял. Наверное лучше было бы create элемент и удалять, вместе со всеми обработчиками. или костылём ...onchange = handler.
|
| Часовой пояс GMT +3, время: 04:04. |