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:57. |