为什么 Javascript 不对我的输入值给予一些尊重?
Why doesn't Javascript put some respeck on my input value?
我目前正在开发一个预算软件,我遇到了这个奇怪的错误。首先是我的代码:
<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">[=12=].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()
应该可以解决这个问题。
我目前正在开发一个预算软件,我遇到了这个奇怪的错误。首先是我的代码:
<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">[=12=].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()
应该可以解决这个问题。