[英]Tip calculator keeps returning Nan. How do I fix it?
我正在嘗試做我的第一個 JS 應用程序,不幸的是 JS 返回 NaN 值而不是所需的數量。 我敢打賭解決方案很簡單,盡管過去 2 個小時我一直試圖自己解決問題,但沒有任何效果......
function calculateTip () { var cost = document.querySelector('.amount').value; var service = document.querySelector('.service').value; var people = document.querySelector('.numOfPeo').value; var tip = (cost * service) / people; if (cost === "" || service === 0) { alert("Please enter values"); } if (people === "" || people <= 1) { people = 1; } document.getElementById('totalTip').style.display = "block"; document.getElementById('tip').innerHTML = tip; } btn.addEventListener('click', calculateTip);
<div class="container"> <h1>Tip Calculator</h1> <div class="descr-1"><p>How Much was your bill?</p></div> <div class="input-1 amount"><input type="text" placeholder="Bill Amount in £"></div> <div class=descr-2><p>How was your service?</p></div> <div class="select"> <select class="service"> <option disabled selected value="0">Choose an Option</option> <option value="30">Extraordinary! - 30%</option> <option value="20">Amazing! - 20%</option> <option value="15">Good - 15%</option> <option value="10">Was Ok - 10%</option> <option value="5">Awful! - 5%</option> </select></div> <div class="descr-3">How many people sharing a bill?</div> <div class="people numOfPeo"> <input type="text" placeholder="Number of People"></div> <button id="btn">Calculate!</button> <div class="total"> <div id="totalTip"> <sup>$</sup><span id="tip">0.00</span> <small id="each">each</small> </div> </div>
你只是對這個類有一個小問題,它應該在輸入上而不是在 div 上。 我已經在我的 jsfiddle 上修復了它:
<div class="container">
<h1>Tip Calculator</h1>
<div class="descr-1"><p>How Much was your bill?</p></div>
<div class="input-1"><input type="text" placeholder="Bill Amount in £" class="amount"></div>
<div class=descr-2><p>How was your service?</p></div>
<div class="select"> <select class="service">
<option disabled selected value="0">Choose an Option</option>
<option value="30">Extraordinary! - 30%</option>
<option value="20">Amazing! - 20%</option>
<option value="15">Good - 15%</option>
<option value="10">Was Ok - 10%</option>
<option value="5">Awful! - 5%</option>
</select></div>
<div class="descr-3">How many people sharing a bill?</div>
<div class="people"> <input type="text" placeholder="Number of People" class="numOfPeo"></div>
<button id="btn">Calculate!</button>
<div class="total">
<div id="totalTip">
<sup>$</sup><span id="tip">0.00</span>
<small id="each">each</small>
</div>
並且您應該在計算小費之前移動驗證:
function calculateTip () {
var cost = document.querySelector('.amount').value;
var service = document.querySelector('.service').value;
var people = document.querySelector('.numOfPeo').value;
if (cost === "" || service === 0) {
alert("Please enter values");
}
if (people === "" || people <= 1) {
people = 1;
}
var tip = cost * service/ people;
document.getElementById('totalTip').style.display = "block";
document.getElementById('tip').innerHTML = tip;
}
btn.addEventListener('click', calculateTip);
HTML 中具有 class amount
的第一個元素是div
,而不是input
。 input
在div
。 所以cost
是undefined
,因為div
沒有value
。 people
也會出現同樣的問題,因為.numOfPeo
再次位於div
,而不是input
。
您需要針對您的輸入。 在不更改 HTML 的情況下,您可以使用后代子選擇器:
var cost = document.querySelector('.amount input').value;
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^^^^^
var service = document.querySelector('.service').value;
var people = document.querySelector('.numOfPeo input').value;
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^^^^^^^
現場示例:
function calculateTip () { var cost = document.querySelector('.amount input').value; var service = document.querySelector('.service').value; var people = document.querySelector('.numOfPeo input').value; var tip = (cost * service) / people; if (cost === "" || service === 0) { alert("Please enter values"); } if (people === "" || people <= 1) { people = 1; } document.getElementById('totalTip').style.display = "block"; document.getElementById('tip').innerHTML = tip; } btn.addEventListener('click', calculateTip);
<div class="container"> <h1>Tip Calculator</h1> <div class="descr-1"><p>How Much was your bill?</p></div> <div class="input-1 amount"><input type="text" placeholder="Bill Amount in £"></div> <div class=descr-2><p>How was your service?</p></div> <div class="select"> <select class="service"> <option disabled selected value="0">Choose an Option</option> <option value="30">Extraordinary! - 30%</option> <option value="20">Amazing! - 20%</option> <option value="15">Good - 15%</option> <option value="10">Was Ok - 10%</option> <option value="5">Awful! - 5%</option> </select></div> <div class="descr-3">How many people sharing a bill?</div> <div class="people numOfPeo"> <input type="text" placeholder="Number of People"></div> <button id="btn">Calculate!</button> <div class="total"> <div id="totalTip"> <sup>$</sup><span id="tip">0.00</span> <small id="each">each</small> </div> </div>
...但我可能會改為更改 HTML。
我還建議將cost
、 service
和people
顯式轉換為數字,而不是依賴隱式轉換。 我在這里的回答概述了您這樣做的各種選擇及其權衡。
另請注意,您需要將service
除以 100 以使其成為百分比(“百分比”字面意思是“每百人”)。 否則,這些提示將是大量的。 ;-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.