【问题标题】:Temperature Converter (IF ELSE conditions) in JavaScriptJavaScript 中的温度转换器(IF ELSE 条件)
【发布时间】:2016-05-08 03:41:08
【问题描述】:

我正在用 JavaScript 创建一个温度转换器。到目前为止,当用户首先输入时,只有摄氏转换起作用。我只是无法弄清楚如何构造其他 if 语句。

  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/

谢谢!

【问题讨论】:

  • 一个问题是第一个 if 条件 if ( celsius.value != "" ) 将始终为真,因为您的 celsius 变量包含一个数字,而数字没有 .value 属性所以你重新实际测试是if(undefined != "")。你需要测试是否document.getElementById("celsius").value != ""。另一个问题是您将所有输入默认为0,因此测试它们是否为空字符串并没有多大意义。 (虽然您可能确实想让用户输入0,所以我不确定您如何仅使用一个转换按钮来处理它。)
  • “if, else if, else if”系列没有错。或“如果,如果,如果,否则”。

标签: javascript if-statement


【解决方案1】:

在您的 JSFiddle 中,您将获取每个值并将其转换为带有 parseFloat 的浮点数。

这意味着当您点击if ( celsius.value != "" ) 时,您正在呼叫.value 一个号码,即undefined。所以你真的在调用if ( undefined != "" ),这是真的,你的第一个if 块将始终执行。

我假设您的意图是获取最近编辑的字段并将其用于转换。我建议使用标志来指示上次编辑的字段。

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

【讨论】:

  • 非常感谢!这正是我所需要的。我正在加速介绍 HTML、CSS 和 JS 课程。我们刚刚在上一堂课中介绍了 JS。到目前为止,我已经很好地处理了它,只是在这方面的逻辑上苦苦挣扎。我非常感谢您的代码的可读性!
【解决方案2】:
<script>
        let cels = document.getElementById('cels');
        let fahr = document.getElementById('fahr');
        cels.addEventListener('input', function(){
            let f = (this.value * 9/5) +32;
            if(!Number.isInteger){
                return f.toFixed(2);
            }
            fahr.value = f;
        });
        fahr.addEventListener('input', function(){
            let c = (this.value - 32) * 5/9;
            if(!Number.isInteger){
                return c.toFixed(2);
            }
            cels.value = c;
        });
    </script>

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2023-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 1970-01-01
  • 2012-10-15
  • 1970-01-01
相关资源
最近更新 更多