为什么Javascript没有对我的输入值进行一些重新考虑?

时间:2016-05-19 18:13:23

标签: javascript jquery jquery-ui javascript-events

我目前正在制作预算软件,我遇到了这个奇怪的错误。首先是我的代码:

<label class="label label-success">Choose your budget</label><br/><br/>

<div class="input-group-addon">€</div>
<input type="number" min="10" max="25000" maxlength="5" step="10" class="form-control" id="Input-budget" placeholder="Amount" onkeyup="this.value=this.value.replace(/[^\d]/,'')" onchange="budCalculate(this.value)">

这是输出行:

<li>
  <strong>
  Total cost: <span id="cost_eur">€0.00 </span> (<span id="cost_usd" class="small">$0.00</span>)
  </strong>
</li>

这是Javascript:

function budCalculate(budget_amount) {
  var budget = budget_amount;
  cost_eur.innerHTML = "€"+((budget).toFixed(2);
  cost_usd.innerHTML = "$"+ (budget * 1.13 ).toFixed(2);
}

它应该将输入值放在输出行上。

onkeyup是为了防止人们输入信件。

我尝试了各种各样的变化,有趣的是几乎相同的代码正在寻找类似的页面。

为什么JavaScript没有重新考虑我的价值?

1 个答案:

答案 0 :(得分:1)

我怀疑问题是budget不是数字对象。 this.value将传递一个String对象。我建议改变你的功能:

function budCalculate(budget_amount) {
  var budget = 0;
  console.log(typeof budget_amount);
  budget = parseFloat(budget_amount);
  cost_eur.innerHTML = "€" + budget.toFixed(2);
  cost_usd.innerHTML = "$" + ( budget * 1.13 ).toFixed(2);
  return budget;
}

您现在可以看到传递的对象类型。 parseFloat()应该纠正这个问题。

工作示例:https://jsfiddle.net/Twisty/bqjg50sb/