为什么不't Javascript对我的输入值进行了一些重新检查

Why doesn't Javascript put some respeck on my input value?

本文关键字:新检查 检查 Javascript 输入 我的 为什么不      更新时间:2023-09-26

我目前正在开发一款预算软件,遇到了这个奇怪的bug。首先是我的代码:

<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不重新检查我的值?

我怀疑问题在于budget不是数字对象。this.value将传递一个字符串对象。我建议更改您的功能:

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/