Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.11.2018, 09:10
Кандидат Javascript-наук
Отправить личное сообщение для pokk Посмотреть профиль Найти все сообщения от pokk
 
Регистрация: 30.01.2014
Сообщений: 145

addEventListener, передать параметр обработчику
Есть динамическое число элементов, который должны выполнять изменение текста (по событию change) в разных ячейках таблицы.
Как для них сделать обработчики ?

1) можно ли сделать один обработчик а внутрь передать какой-нибудь индекс того какой элемент его вызывал ?
2) Как сделать переменное количество функций ?
Ответить с цитированием
  #2 (permalink)  
Старый 02.11.2018, 09:19
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

п.1
//устанавливаем обработчик на родителя всех элементов, для которых нужно слушать события
document.querySelector('#container').addEventListener('change',function(e){
    if(!e.target.classList.contains('target'))//Если элемент, на котором произошло событие не имеет класса target, то ничего не делаем
        return;
    
    const that=e.target;//Элемент, на котором произошло событие
});
Ответить с цитированием
  #3 (permalink)  
Старый 02.11.2018, 09:33
Кандидат Javascript-наук
Отправить личное сообщение для pokk Посмотреть профиль Найти все сообщения от pokk
 
Регистрация: 30.01.2014
Сообщений: 145

В чем разница между?
select.addEventListener("change",SwitchDirect);

function SwitchDirect(){
	
	console.log(this);
	if(this.id==="Id_typeIn_0"){
		
	}	
	if(this.id==="Id_typeIn_1"){
		
	}
}


Все элементы создаются динамически, и на этапе создания я сразу к элементу добавляю addEventListener
Ответить с цитированием
  #4 (permalink)  
Старый 02.11.2018, 09:44
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

pokk, разница в том, что вы на каждый элемент будете вешать по обработчику события, а я повешаю только 1 обработчик.
Да и в вопросе у вас написано "можно ли сделать один обработчик", так что разница должна быть очевидна.
Ответить с цитированием
  #5 (permalink)  
Старый 02.11.2018, 09:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Сообщение от pokk
В чем разница
класс проще проверить плюс не нужно навешивать на каждый select
Ответить с цитированием
  #6 (permalink)  
Старый 02.11.2018, 10:21
Кандидат Javascript-наук
Отправить личное сообщение для pokk Посмотреть профиль Найти все сообщения от pokk
 
Регистрация: 30.01.2014
Сообщений: 145

Получается, что при создании элемента я присваиваю ему класс, а потом как вся таблица создана, нахожу все элементы с классом и вешаю обработчик на них всех.
Nexus,
"разница в том, что вы на каждый элемент будете вешать по обработчику события, а я повешаю только 1 обработчик."
Ну так вот в итоге будет тоже самое ? у вас будет 1 функция обработчик на всех элементах, и у меня будет тоже самое каждому элементу присвоена 1 функция и в итоге будет у всех элементов 1 обработчик, просто вы сразу массиву элементов присвоили обработчик, а у меня по штучно. Или не так ?
Ответить с цитированием
  #7 (permalink)  
Старый 02.11.2018, 10:29
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

pokk, не так.
У вас кол-во обработчиков, которое будет повешано на элементы будет равно кол-ву этих элементов, а у меня всего 1.
Почитайте про делегирование:
https://learn.javascript.ru/event-delegation
Ответить с цитированием
  #8 (permalink)  
Старый 02.11.2018, 10:46
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от pokk
при создании элемента я присваиваю ему класс
И как по классу ориентироваться во множестве? Уж лучше тогда писать в атрибут ячеек индекс строки и индекс столбца. Конечно если в этом есть необходимость.
Ответить с цитированием
  #9 (permalink)  
Старый 02.11.2018, 13:42
Кандидат Javascript-наук
Отправить личное сообщение для pokk Посмотреть профиль Найти все сообщения от pokk
 
Регистрация: 30.01.2014
Сообщений: 145

laimas, "Уж лучше тогда писать в атрибут ячеек индекс строки и индекс столбца" Это через какой параметр?
Ответить с цитированием
  #10 (permalink)  
Старый 02.11.2018, 13:49
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

pokk, в смысле "параметр"?
У элементов в html есть атрибуты, есть data-атрибуты.
Во вторые можно затолкать что угодно (главное, чтобы в строку конвертировалось) и при необходимости извлечь.
Про data-атрибуты:
https://developer.mozilla.org/ru/doc...ata_attributes
https://developer.mozilla.org/ru/doc...lement/dataset
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать входной параметр в функции JS Kimor AJAX и COMET 0 16.10.2018 15:47
Как передать параметр из state во вью?? Akmarik Angular.js 2 16.08.2016 07:05
Передать параметр при ajax rafaello AJAX и COMET 5 10.04.2014 11:25
как из js передать параметр в html wins Общие вопросы Javascript 6 22.12.2013 15:56
Передать параметр из фрейма SenseyR Общие вопросы Javascript 2 11.04.2011 14:00