javascript - 为什么 document.getElementById().value 会返回一个字符串,即使它的类型是数字?
问题描述
我正在尝试制作一个小费计算器,并且总变量返回一个字符串,因为 typeof bill 是一个字符串,为什么会这样,即使文本输入框类型是number?
输出(“输入的账单为 1000,人数为 1):- 字符串
150
150
1000150
document.querySelector('#persons').addEventListener('change', (findresult));
document.querySelector('#bill').addEventListener('change', (findresult));
document.querySelector('#percent').addEventListener('change', (findresult));
function findresult() {
var persons = document.getElementById('persons').value;
var bill = document.getElementById('bill').value;
var percent = document.getElementById('percent').value;
// console.log(persons);
console.log(typeof bill);
// console.log(percent);
var tip = (bill * percent) / 100;
var tip_person = tip / persons;
var total = bill + tip;
console.log(tip);
console.log(tip_person);
console.log(total);
}
<div class="container">
<h1>Tip calcuator</h1><br>
<div class="inputs">
<input type="number" class="inputfield" id="persons" placeholder="No of Persons"><br><br>
<input type="number" class="inputfield" id="bill" placeholder="Bill"><br><br>
<input type="number" class="inputfield" id="percent" placeholder="Tip%">
</div>
<br>
<div class="result">
<br>
<p>Tip Per Person :</p>
<p>TOTAL :</p>
</div>
</div>
解决方案
用parseFloat包围bill, percent
声明值,以便在将字符串转换为数字时允许小数。value
var bill = parseFloat(document.getElementById('bill').value);
var percent = parseFloat(document.getElementById('percent').value);
您可以使用该step
属性在数字输入中允许小数,并将其设置为0.01
。这将影响使用输入上的向上、向下按钮时创建的值。
<input type="number" class="inputfield" id="bill" placeholder="Bill" step="0.01" >
document.querySelector('#persons').addEventListener('change', (findresult));
document.querySelector('#bill').addEventListener('change', (findresult));
document.querySelector('#percent').addEventListener('change', (findresult));
function findresult() {
var persons = document.getElementById('persons').value;
// Use parseFloat to allow for decimals
var bill = parseFloat(document.getElementById('bill').value);
var percent = parseFloat(document.getElementById('percent').value);
// console.log(persons);
console.log(typeof bill);
// console.log(percent);
var tip = (bill * percent) / 100;
var tip_person = tip / persons;
var total = bill + tip;
console.log(tip);
console.log(tip_person);
console.log(total);
}
<div class="container">
<h1>Tip calcuator</h1><br>
<div class="inputs">
<input type="number" class="inputfield" id="persons" placeholder="No of Persons"><br><br>
<!-- Allow cents to be allowed via the `step` attribute -->
<input type="number" class="inputfield" id="bill" placeholder="Bill" step="0.01" ><br><br>
<input type="number" class="inputfield" id="percent" placeholder="Tip%">
</div>
<br>
<div class="result">
<br>
<p>Tip Per Person :</p>
<p>TOTAL :</p>
</div>
</div>
推荐阅读
- firebase - Flatlist 不显示来自 firebase 的数据
- python - Snakemake Conda 环境似乎没有被激活,尽管它说它是
- javascript - 从 React 组件调用时未定义 Thunk Fetch
- mapreduce - SutieScript RESTlet '缺少必需的参数:MapReduceScriptTask.scriptId'
- android - 将数据从一个活动发送到另一个活动会导致应用在 Android Studio 中崩溃
- xcode - 构建脚本如何知道 .xctestplan 将在构建时使用?
- python - Pyx,有没有办法直接绘制到像 Matplotlib 这样的窗口?
- javascript - 过滤列中值以下的数据表函数
- dart - 如何在 Dart lang 中获取客户端的 URI/URL?
- sql - 如何在循环查询中以 JSON 形式返回结果?