Где ошибка в коде?

Сейчас делаю учебный проект в виде приложения на HTML css js для последующей компиляции в exe. Но при тестировании в браузере возникает проблема: если ввести сначала цифры в поле (нужное количество вещества на кв м), а потом выбрать пункт из выпадающего списка, то всё работает, а если наоборот, то нет. Вот ссылка на репозиторий (файл script.js) https://github.com/Leonid-777/CalcFertilizerWeb
Вот код
window.addEventListener('DOMContentLoaded', function() {
    let nitrogenSelect = document.getElementById('nitrogen_select'),
        phosphorusSelect = document.getElementById('phosphorus_select'),
        potassiumSelect = document.getElementById('potassium_select'),
        nitrogenBtn = document.querySelectorAll('.compute')[0],
        phosphorusBtn = document.querySelectorAll('.compute')[1],
        potassiumBtn = document.querySelectorAll('.compute')[2],
        nitrogenInput = document.getElementsByTagName('input')[0],
        phosphorusInput = document.getElementsByTagName('input')[1],
        potassiumInput = document.getElementsByTagName('input')[2],
        nitrogen = document.getElementById('nitrogen'),
        phosphorus = document.getElementById('phosphorus'),
        potassium = document.getElementById('potassium'),
        total = 0,
        nitrogenValue = 0;

    nitrogen.innerHTML = '0 гр';
    phosphorus.innerHTML = '0 гр';
    potassium.innerHTML = '0 гр';

    nitrogenInput.oninput = function() {
        if(typeof(nitrogenInput.value) != '' || typeof(nitrogenInput.value) != "string") {
            total = nitrogenInput.value * 100;
        } else {
            nitrogen.innerHTML = 'Ошибка!';
        }
        nitrogenSelect.oninput = function() {
            let a = total;
            nitrogenValue = Math.round(a/this.options[this.selectedIndex].value) + ' гр';
        };
    };
    nitrogenBtn.onclick = function() {
        nitrogen.innerHTML = nitrogenValue;
    };

    phosphorusInput.oninput = function() {
        if(typeof(phosphorusInput.value) != '' || typeof(phosphorusInput.value) != "string") {
            total = phosphorusInput.value * 100;
        } else {
            phosphorus.innerHTML = 'Ошибка!';
        }
        phosphorusSelect.oninput = function() {
            let b = total;
            phosphorusValue = Math.round(b/this.options[this.selectedIndex].value) + ' гр';
        };
    };
    phosphorusBtn.onclick = function() {
        phosphorus.innerHTML = phosphorusValue;
    };

    potassiumInput.oninput = function() {
        if(typeof(potassiumInput.value) != '' || typeof(potassiumInput.value) != "string") {
            total = potassiumInput.value * 100;
        } else {
            potassium.innerHTML = 'Ошибка!';
        }
        potassiumSelect.oninput = function() {
            let b = total;
            potassiumValue = Math.round(b/this.options[this.selectedIndex].value) + ' гр';
        };
    };
    potassiumBtn.onclick = function() {
        potassium.innerHTML = potassiumValue;
    };

    
});


  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
@sand3001
Всего по немногу
potassiumInput.oninput = function() {
        if(typeof(potassiumInput.value) != '' || typeof(potassiumInput.value) != "string") {
            total = potassiumInput.value * 100;
        } else {
            potassium.innerHTML = 'Ошибка!';
        }
        potassiumSelect.oninput = function() {
            let b = total;
            potassiumValue = Math.round(b/this.options[this.selectedIndex].value) + ' гр';
        };
    };

potassiumSelect.oninput появляется только после вызова potassiumInput.oninput, поэтому при загрузке страницы селектам не назначается событие oninput, так же с остальными 2-мя
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
Intspirit Краснодар
от 80 000 до 150 000 ₽
18 янв. 2021, в 11:12
3000 руб./за проект
18 янв. 2021, в 10:53
1500 руб./в час
18 янв. 2021, в 10:44
1500 руб./за проект