Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.08.2018, 18:46
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

addEventListener внутри forEach можно?
Подскажите, можно ли в js устанавливать слушатель addEventListener внутри forEach ?
Если я вот такой код:
for (var i = 0; i < inpPrim.length; i++) {
    inpPrim[i].addEventListener('change', () => plankiPrim())
}

перепишу вот так:
inpPrim.forEach(el => el.addEventListener('change', () => plankiPrim()));

Так допускается? Может так не рекомендуется (нагрузки, замедление)?
Или лучше для addEventListener делать первый вариант на for ?
Ответить с цитированием
  #2 (permalink)  
Старый 09.08.2018, 18:55
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от MC-XOBAHCK
Так допускается?
да, и так часто лучше, c i меньше шансов ошибиться.
но зачем в данном случае () => plankiPrim(), можно просто plankiPrim?
Ответить с цитированием
  #3 (permalink)  
Старый 09.08.2018, 19:07
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

рони, Спасибо, буду знать.
А вот как можно сразу? Можете показать код?
Я вот так попробовал запустить:
inpPrim.forEach(el => el.addEventListener('change', plankiPrim()));

ошибок нет, но работает не правильно. Срабатывает сразу при загрузке, а не по событию. А потом уже на событие не реагирует.
Ответить с цитированием
  #4 (permalink)  
Старый 09.08.2018, 19:25
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

MC-XOBAHCK, ответьте на вопросы:
1. Что делают скобочки после имени функции?
2. Что именно ожидает вторым аргументом addEventListener?
Найдите противоречие.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 09.08.2018, 19:27
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Сообщение от Aetae Посмотреть сообщение
MC-XOBAHCK, ответьте на вопрос: что значат скобочки в конце имени функции?
Вызов функции.
Сейчас попробую без скобочек.
Ответить с цитированием
  #6 (permalink)  
Старый 09.08.2018, 19:30
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Aetae, Спасибо за намёк!
inpPrim.forEach(el => el.addEventListener('change', plankiPrim));

Работает!!! : )
Ответить с цитированием
  #7 (permalink)  
Старый 09.08.2018, 23:35
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

А можно ещё спросить, вот такое можно ещё сократить?
const inpPrim = document.querySelectorAll('input[name="vvPl"]'); // это остаётся (используется ещё в других местах)

let size = [];
inpPrim.forEach((el, i) => size[i] = +el.value);

Типа вот как то так нельзя? :
let size = [].inpPrim.forEach((el, i) => size[i] = +el.value);
Ответить с цитированием
  #8 (permalink)  
Старый 09.08.2018, 23:39
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

let size = [].map.call(inpPrim, el => +el.value);


forEach метод который ничего не возвращает (у него только побочный эффект)

Последний раз редактировалось j0hnik, 09.08.2018 в 23:47.
Ответить с цитированием
  #9 (permalink)  
Старый 10.08.2018, 00:01
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

j0hnik, Круто!
Метод call это новое для меня. Вроде на моём примере он вполне понятен, но я лучше подробненько перечитаю весь урок.
Ответить с цитированием
  #10 (permalink)  
Старый 10.08.2018, 00:04
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

да все потому что inpPrim это нод лист, а так можно было бы и без кол.


var inpPrim = [...document.querySelectorAll('input')];
let size = inpPrim.map(el => +el.value);


но с кол в данном случает будет быстрей.

Последний раз редактировалось j0hnik, 10.08.2018 в 00:07.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение значения переменной внутри обработчика события jQuery Mbenga Общие вопросы Javascript 2 01.07.2013 10:57
Как можно нажать сразу на несколько кнопок? Yan.Total Events/DOM/Window 2 21.03.2013 11:02
form внутри form dabutch Общие вопросы Javascript 4 23.03.2009 09:56
Подсветка HTML внутри TEXTAREA inetusr Общие вопросы Javascript 2 24.02.2009 17:22
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00