Задать вопрос
@Pulychuk

Как сделать перерасчет при активных радио кнопках?

Перейдя на jsfiddle Вы лучше поймете суть.
Постараюсь объяснить понятно. За код прошу не ругать.
Есть 3 этапа для подсчета стоимости. 1 и 3 состоит из радио кнопок. 2 из выпадающего списка.
По умолчанию "Опции 1.1", "Опции 2.1", "Опции 3.1" активная.
Пока опция 3.1 активная нужно стоимость сбрасывать на 0, независимо от выбранных опций с этапа 1 и 2.
Когда мы выбираем "Опция 3.2" или "Опция 3.3" нужно перечислить стоимость, в зависимости от активных кнопок на этапе 1-2.
К примеру на 1 этапе мы выбрали "Опция 1.2", на 2 - "Опция 2. 2", на 3 этапе если активна кнопка "Опции 3.1", то стоимость будет 0 (это работает). Но если выбрать "Опции 3.2", то стоимость подсчитает только с этой кнопки. Для корректного подсчета нужно еще раз нажать на нужные опции на 1 и 2 этапе.

И здесь собственно вопрос, как сделать чтобы стоимость считалась автоматически, без лишнего клика на опции (этап 1-2) когда они и так активны

Код который получился на jsfiddle.
  • Вопрос задан
  • 97 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик расширенный
    13 месяцев
    Далее
  • Stepik
    Пакет курсов JavaScript и React разработчика
    3 месяца
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Создаёте функцию расчёта полной суммы, с учётом всех условий, и назначаете её в качестве обработчиков событий всем элементам, от значений которых сумма зависит. Так будет гораздо проще и короче, чем то, что у вас есть сейчас:

function recalc() {
  const a = +$('[name="radio-register"]:checked').attr('data-value');
  const b = +$('#count-class option:selected').attr('data-value');
  const c = +$('[name="radio-znak"]:checked').attr('data-value'); 

  $('#price_result, #price1').text(a ? a + b + c : 0);
}

$('input[name="radio-znak"], input[name="radio-register"], #count-class').change(recalc);
recalc();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы