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 ? |
Цитата:
но зачем в данном случае () => plankiPrim(), можно просто plankiPrim? |
рони, Спасибо, буду знать.
А вот как можно сразу? Можете показать код? Я вот так попробовал запустить:
inpPrim.forEach(el => el.addEventListener('change', plankiPrim()));
ошибок нет, но работает не правильно. Срабатывает сразу при загрузке, а не по событию. А потом уже на событие не реагирует. |
MC-XOBAHCK, ответьте на вопросы:
1. Что делают скобочки после имени функции? 2. Что именно ожидает вторым аргументом addEventListener? Найдите противоречие. |
Цитата:
Сейчас попробую без скобочек. |
Aetae, Спасибо за намёк!
inpPrim.forEach(el => el.addEventListener('change', plankiPrim));
Работает!!! : ) |
А можно ещё спросить, вот такое можно ещё сократить?
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); |
let size = [].map.call(inpPrim, el => +el.value); forEach метод который ничего не возвращает (у него только побочный эффект) |
j0hnik, Круто!
Метод call это новое для меня. Вроде на моём примере он вполне понятен, но я лучше подробненько перечитаю весь урок. |
да все потому что inpPrim это нод лист, а так можно было бы и без кол.
var inpPrim = [...document.querySelectorAll('input')];
let size = inpPrim.map(el => +el.value);
но с кол в данном случает будет быстрей. |
Я не против call, наоборот - это очень хорошо что Вы так показали. Спасибо! У меня он часто встречается в решениях которые мне здесь на форуме подсказывали. Я его упустил.
JS это как иностранный язык - нельзя всё сразу запомнить, нужно время. Вот у меня время до call дошло. Лучше поздно чем никогда. |
Сделать разок так:
[
"slice",
"lastIndexOf",
"indexOf",
"forEach",
"map",
"filter",
"reduce",
"reduceRight",
"some",
"every",
"find",
"findIndex",
"includes"
].forEach(method => {
if(method in NodeList.prototype) return;
NodeList.prototype[method] = Array.prototype[method];
});
и забыть. :)Честно говоря меня подбешивает, что NodeList не наследник Array. Для HTMLCollection причина понятна, но для NodeList - хоть убей. :( |
ну ок, за одно гляньте по bind и apply
https://youtu.be/213r4EOHfF0?list=PL...LeWwe m&t=133 |
Aetae,
по разку для каждого проекта |
Цитата:
У меня по дефалту конечно не всё так просто, но суть едина. |
Цитата:
|
нет, но и все наработки в одну кучу лучше тоже не запихывать.
|
Цитата:
|
| Часовой пояс GMT +3, время: 14:35. |