Yandex Metrika
sanches.free 19 просмотров

Обработчик клика на динамически добавленные элементы через делегирование с контейнера

Разбор задачи

Вместо прямых addEventListener на каждую карточку после appendChild подписывают родительский элемент и фильтруют target через Element.closest по data-атрибуту.

document.getElementById('news-roll').addEventListener('click', (ev) => {
  const trigger = ev.target.closest('[data-action="open-sheet"]');
  if (!trigger || !ev.currentTarget.contains(trigger)) return;
  ev.preventDefault();

  BX.ajax.runComponentAction(/* namespace */, 'preview', {
 mode: 'class',
 data: { id: Number(trigger.dataset.id) }, 
 }).then((reply) => {
    BX.UI.Notification.Center.notify({ content: reply.data.snippetHtml });
  });
});

Любые прямые вызовы BX.ajax.* параметризуйте CSRF там, где требует ядро, и не смешивайте с синхронным innerHTML пользовательским вводом.

Замечания перед выкладкой

Вносите правки только через среду с бэкапом и понятным diff. Если сниппет идёт в шаблон на Битрикс, проверьте конфликт с уже подключённым jQuery/UI и включите «отложенный» запуск там, где длинный главный файл может обрезать DOMContentLoaded.

Не хотите копаться сами?

Починю за 1-3 дня. Без предоплаты — оплата по результату.

15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии