【问题标题】:Bootstrap form outputting wrong results引导表单输出错误结果
【发布时间】:2019-04-16 09:15:39
【问题描述】:

尽管没有被链接(据我所知),当输入摄氏温度时,华氏公式将运行并实现到摄氏输出,正确的公式在华氏输出上输出,反之亦然输入华氏号码。

图片 我尝试了几个 if 语句,但它们似乎只适用于其中一个输出,而另一个输出根本没有值结果。

**HTML//Bootstrap**

<div class="form-group">
   <div class="input-group">
      <span class="input-group-addon">C°</span>
         <input type="number" class="form-control" id="cAmount" placeholder="Celsius">
    </div>
</div>

<div class="form-group">
   <div class="input-group">
      <span class="input-group-addon">F°</span>
        <input type="number" class="form-control" id="fAmount" placeholder="Fahrenheit">
    </div>
</div>              





<div class="form-group">
  <div class="input-group">
     <span class="input-group-addon">Celsius Temperature</span>
       <input type="number" class="form-control" id="celsius-result" disabled>

   </div>
</div>

<div class="form-group">
   <div class="input-group">
      <span class="input-group-addon">Fahrenheit Temperature</span>
        <input type="number" class="form-control" id="f-res" disabled>

    </div>
</div>

**Javascript**

let formSubmit = document.querySelector('#tempCalculator')

formSubmit.addEventListener('submit', runEvent);

function runEvent(e) {
let celInput = document.querySelector('#cAmount');
let fahInput = document.querySelector('#fAmount');
let celResult = document.querySelector('#celsius-result')
let fahResult = document.querySelector('#f-res');


//input

let fahVal = parseFloat((celInput.value * 9/5) + 32);

let celVal = parseFloat((fahInput.value - 32) * 5/9);

//output

celResult.value = celVal.toFixed(2);

fahResult.value = fahVal.toFixed(2);

//stop form refreshing
e.preventDefault();

}

预期只是在相应的输出中出现一个正确的值,这确实发生了,但是在意外的输出中出现了一个不正确的值。

这是完整应用程序的 Codepen 链接:https://codepen.io/str-99/pen/NmwXJz

【问题讨论】:

  • 我没有看到你的错误。输入摄氏数时,华氏公式将运行并执行到华氏温度输出而不是摄氏温度
  • 我附上了一张图片,向您展示我的屏幕上显示的内容。
  • 您在图像中的回报是真实的。 celInput = 10fahVal = parseFloat((celInput.value * 9/5) + 32) = 50Fahrenheit Temperature return 50fahInput = 0celVal = parseFloat((fahInput.value - 32) * 5/9) = -17,78Celsius Temperature return -17,78。这里没有错误
  • 所以即使我没有输入一个值,它仍然会将它注册为 0 吗?您建议解决此问题的最佳方法是什么?
  • 我使用了 if 语句并解决了这个问题。感谢您为我强调这一点,这真的很有帮助。

标签: javascript html bootstrap-form-helper


【解决方案1】:

如果我对您的理解正确,这是完成您尝试的一种方法:

let formSubmit = document.getElementById('tempCalculator');

formSubmit.addEventListener('submit', runEvent);

function runEvent(e) {
    let celInput = document.querySelector('#cAmount');
    let fahInput = document.querySelector('#fAmount');
    let celResult = document.querySelector('#celsius-result')
    let fahResult = document.querySelector('#f-res');

    //input
    let fahVal = parseFloat((celInput.value * 9/5) + 32);

    let celVal = parseFloat((fahInput.value - 32) * 5/9);

    //output

    celResult.value = Number(fahInput.value) > 0 ? celVal.toFixed(2) : '';

    fahResult.value = Number(celInput.value) > 0 ? fahVal.toFixed(2) : '';

    //reset input boxes
    document.getElementById('cAmount').value = '';
    document.getElementById('fAmount').value = '';

    e.preventDefault();
}

三元运算符非常适合这样的实例。当它不是正确/期望的输入时,我们可以简单地将值更改为空字符串。并且对于添加测量清除输入框以在每次计算后“重置”。

【讨论】:

  • 非常感谢,我已经用类似的想法解决了这个问题。我只是在任何地方都找不到已解决的按钮)但是谢谢!很高兴以三元运算符的形式看到它。
  • @SteveRoe 很高兴听到您解决了这个问题!三元组是个人最喜欢的,从少写代码的角度来看哈哈。希望对大家有所帮助!
  • 当然,我的目标是更多地使用它们!
猜你喜欢
  • 2011-10-05
  • 1970-01-01
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
  • 2017-08-31
  • 1970-01-01
  • 2023-01-21
  • 2013-01-28
相关资源
最近更新 更多