Задать вопрос
zzzfairy
@zzzfairy
Учусь на front-end разработчика

Как сократить код?

Как сократить повторения в конце кода калькулятора?
5d20b9acae82c298211038.jpeg
let persons = document.querySelectorAll(".counter-block-input")[0],
        restDays = document.querySelectorAll(".counter-block-input")[1],
        place = document.getElementById("select"),
        totalValue = document.getElementById("total"),
        personsSum = 0,
        daysSum = 0,
        total = 0;
        
        
        totalValue.textContent = 0;

        persons.addEventListener("change", function() {
            personsSum = +this.value;
            total = (daysSum + personsSum) * 4000;

            if (restDays.value == "") {
                totalValue.textContent = 0;
            } else {
                totalValue.textContent = total; 
            }
        });

        restDays.addEventListener("change", function() {
            daysSum = +this.value;
            total = (daysSum + personsSum) * 4000;

            if (persons.value == "") {
                totalValue.textContent = 0;
            } else {
                totalValue.textContent = total; 
            }
        });
        
        place.addEventListener("change", function() {
            if (restDays.value == "" || persons.value == "") {
                totalValue.textContent = 0;
            } else {
                let a = total;
                totalValue.textContent = a * this.options[this.selectedIndex].value;
            }
        });

        persons.addEventListener("change", function() {
            if (restDays.value == "" || restDays.value == 0 || persons.value == "" || persons.value == 0) {
                totalValue.textContent = 0;
            }
        });

        restDays.addEventListener("change", function() {
            if (restDays.value == "" || restDays.value == 0 || persons.value == "" || persons.value == 0) {
                totalValue.textContent = 0;
            }
        });

});
  • Вопрос задан
  • 302 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 2
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Вообще, можно очень серьезно сократить. По сути, вам для подсчета нужна единая функция, которая будет брать три числа из полей, умножать их друг на друга и потом на число. Еще лучше убрать глобальные переменные, которые изменяются в коде. Получается вот такой простенький код

const persons = document.querySelectorAll(".counter-block-input")[0];
const restDays = document.querySelectorAll(".counter-block-input")[1];
const place = document.getElementById("select");
const totalValue = document.getElementById("total");

function calculateTotal() {
    const personsSum = +persons.value || 0;
    const daysSum = +restDays.value || 0;
    const placeIndex = place.selectedIndex;

    const total = (daysSum + personsSum) * place.options[placeIndex].value * 4000;

    totalValue.textContent = total;
}

persons.addEventListener("change", calculateTotal);
restDays.addEventListener("change", calculateTotal);
place.addEventListener("change", calculateTotal);
calculateTotal(); // сразу вызываем, чтобы обнулить поле
Ответ написан
Zoominger
@Zoominger
System Integrator
Ну вот это:
if (persons.value == "") {
                totalValue.textContent = 0;
            } else {
                totalValue.textContent = total; 
            }

можно заменить на тернарный оператор и вообще вынести в отдельную функцию. Это тоже:
persons.addEventListener("change", function() {
            if (restDays.value == "" || restDays.value == 0 || persons.value == "" || persons.value == 0) {
                totalValue.textContent = 0;
            }
        });
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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