我目前正在制作预算软件,我遇到了这个奇怪的错误。首先是我的代码:
<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没有重新考虑我的价值?
答案 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()
应该纠正这个问题。