Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.07.2020, 12:08
Профессор
Отправить личное сообщение для atanov Посмотреть профиль Найти все сообщения от atanov
 
Регистрация: 27.06.2016
Сообщений: 180

почему this плодится?
Доброго времени суток,
вот есть такой код:
<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.
Если прокликать по дивам, а потом что-то выбрать в селекте, то в консоле появиться всё что кликал. Почему так происходит?
Изображения:
Тип файла: jpg Снимок экрана (229).jpg (6.2 Кб, 5 просмотров)

Последний раз редактировалось atanov, 24.07.2020 в 12:10. Причина: добавил изображение
Ответить с цитированием
  #2 (permalink)  
Старый 24.07.2020, 13:05
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,126

в JS this имеет динамическую природу и фактическое его значение определяется в момент фактического вызова функции.
Ответить с цитированием
  #3 (permalink)  
Старый 24.07.2020, 18:58
Аватар для Белый шум
Профессор
Отправить личное сообщение для Белый шум Посмотреть профиль Найти все сообщения от Белый шум
 
Регистрация: 19.01.2012
Сообщений: 498

atanov,
При каждом клике на div у вас добавляется слушатель события на селект.
addEventListener не заменяет обработчик события, а добавляет новый.
Ответить с цитированием
  #4 (permalink)  
Старый 27.07.2020, 16:02
Профессор
Отправить личное сообщение для atanov Посмотреть профиль Найти все сообщения от atanov
 
Регистрация: 27.06.2016
Сообщений: 180

Белый шум, да, это я уже понял. Наверное лучше было бы create элемент и удалять, вместе со всеми обработчиками. или костылём ...onchange = handler.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему некоторые операторы возвращают значения, а не ссылки? dump Общие вопросы Javascript 15 25.07.2012 17:28
Регулярные выражения. Почему находи именно так? jsuse Общие вопросы Javascript 4 21.11.2011 16:37
Свойства объекта, методы и this. Почему свойство вызывается с () ? jsuse Общие вопросы Javascript 2 04.11.2011 20:39
Prototype. Одноблочное определение псевдокласса. Литеральная форма не робит. Почему? GuardCat Общие вопросы Javascript 6 03.10.2011 13:46
Почему это работает? (инклуд JS в JS) Василий Б. Общие вопросы Javascript 4 11.06.2010 12:41