2016-05-08 6 views
1

Я создаю преобразователь температуры из JavaScript. Пока только преобразование Цельсия работает, когда пользователь вводит это в первую очередь. Мне просто сложно понять, как структурировать другие операторы if.Преобразователь температуры (условия IF ELSE) в JavaScript

var conversionC; 
    var conversionF; 
    var conversionK; 

    if (celsius.value != "") { 
    conversionF = document.getElementById("celsius").value * 9/5 + 32; 
    document.getElementById("fahrenheit").value = Math.round(conversionF); 
    } 

    else if (fahrenheit.value != ""){ 
    conversionC = (document.getElementById("fahrenheit").value - 32) * 5/9; 
    document.getElementById("celsius").value = Math.round(conversionC); 
    } 

    if (kelvin.value != ""){ 
    conversionC = document.getElementById("celsius").value - -273; 
    document.getElementById("kelvin").value = Math.round(conversionC); 
    } 

Я только хочу, чтобы держать кнопку один Преобразовать, что у меня есть, и до сих пор он работает, когда пользователь решает ввести Фаренгейт или Кельвин первым.

Любые рекомендации приветствуются!

Вот JSFiddle моей программы до сих пор: https://jsfiddle.net/2sharkp/kw2sr1wx/

Спасибо!

+0

Ну одна проблема заключается в том, что первое, если условие 'если (celsius.value! =«»)' Всегда будет верным, потому что ваш 'celsius' переменная содержит число, а числа не имеют свойство '.value', так что вы на самом деле тестируете' if (undefined! = "") '. Вам нужно проверить, является ли document.getElementById («celsius»). Value! = "" '. Другая проблема заключается в том, что вы по умолчанию вводите все значения в '0', поэтому тестирование их на пустую строку не имеет смысла. (Хотя вы, вероятно, хотите, чтобы пользователь вводил '0', поэтому я не уверен, как вы могли бы справиться с этим только с одной кнопкой Convert.) – nnnnnn

+0

Ничего плохого в серии« if, else if, else if ». Или «if, else if, else». – Nate

ответ

0

В вашем JSFiddle вы принимаете каждое значение и конвертируете его в поплавок с parseFloat.

Это означает, что когда вы нажмете if (celsius.value != ""), вы звоните .value по номеру undefined. Таким образом, вы действительно вызываете if (undefined != ""), что верно, и ваш первый блок if всегда будет выполняться.

Я предполагаю, что вы намерены взять последнее отредактированное поле и использовать его для преобразования. Я бы рекомендовал использовать флаг, чтобы указать, какое поле было изменено последним.

https://jsfiddle.net/camEdwards/chyg4ws1/

+0

Большое вам спасибо! Это было именно то, что мне нужно. Я в ускоренном вступлении к курсу HTML, CSS и JS. Мы только что познакомились с последним классом JS. До сих пор я хорошо справился с этим, просто боролся с этой логикой. Я очень ценю, насколько читаем ваш код! – ziggy

Смежные вопросы