@AndreyKuz
Интеграция сайта с 1с

Зачем две функции?

Код написал - работает,но зачем здесь 2 функции не пойму.Вопрос ,что делает первая стрелочная функция? И можно-ли как-то сократить запись?
peresortDel.forEach(el => {
  el.onclick = function() {
    peresortcontent.style.display = 'none';
  }});
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ответы на вопрос 2
IonDen
@IonDen
JavaScript developer. IonDen.com
Обычная проблема, пытаетесь писать сокращенный код до того как поняли что происходит.

Я бы рекомендовал вначале писать максимально развернуто и только потом сокращать по мере надобности.

// метод forEach на каждый найденный элемент вызывает функцию, куда первым аргументом передает ссылку на этот элемент
peresortDel.forEach(foreachCallbak);

function foreachCallbak(el) {
  el.onClick = onClickCallback;
}

function onClickCallback() {
  peresortcontent.style.display = 'none';
}
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
Что происходит
Каждому элементу коллекции peresortDel вешается слушатель события клика.

Каким образом
  1. Внутрь forEach() передается функция, которую применят к каждому элементу.
  2. Слушатель события click — тоже функция. Другая, чем в п.1, поэтому их тут.. две.

Как быть
Чтобы короче — можно повесить всего один слушатель не на каждый элемент, а на общего родителя где-то выше. Это позволит сэкономить на функции в forEach(), и не создавать новую функцию для каждого элемента.
commonParent.addEventListener('click', ({ target }) => {
  if (!target.classList.contains("tot-samyj-class")) return;
  target.style.display = "none";
});
Подробнее не подскажу, т.к. в вопросе нет действующего примера или хотя бы разметки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы