@rasimzes

Есть несколько select со скриптом на изменение соседних элементов. Как сделать чтобы скрипт отрабатывал внутри того блока, в котором изменили select?

Необходимо чтобы изменения заголовка и цены происходили только в том блоке в котором был изменен select.
Codepen
  • Вопрос задан
  • 47 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const containerSelector = '.card';
const selectSelector = `${containerSelector} select`;
const dataAttr = 'name';

$(selectSelector).change(function() {
  $(this)
    .closest(containerSelector)
    .find(`[data-${dataAttr}]`)
    .hide()
    .filter(`[data-${dataAttr}="${this.value}"]`)
    .show();
}).val(defaultValueSelected).trigger('change');

// или

const selects = document.querySelectorAll(selectSelector);
const onChange = ({ target: t }) => t
  .closest(containerSelector)
  .querySelectorAll(`[data-${dataAttr}]`)
  .forEach(n => n.style.display = t.value === n.dataset[dataAttr] ? 'block' : 'none');

selects.forEach(n => {
  n.value = defaultValueSelected;
  n.addEventListener('change', onChange);
  n.dispatchEvent(new Event('change'));
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
profesor08
@profesor08 Куратор тега JavaScript
Выбираешь блоки, в блоке выбираешь селект, навешиваешь на него обработчики.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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