Reputation: 21
I'm learning basic Javascript, and I'm trying to make a tip calculator.
I got most of my program done, but when it's running my values they are stuck on 0. I identified by id and made sure that they are the right names and ran them in console log. Upon running it the alert says "enter valid numbers", so I know that nothing happens to it.
I looked at similar programs and see that there's no issue even though much of the code is similar. This might be a simple solution but any help would be appreciated!
var bill = document.getElementById("cost").value;
var tip = document.getElementById('tip').value;
function totalBill() {
if (tip >= 1) {
tip = tip / 100;
}
if (bill === "" || tip === 0) {
alert("enter valid numbers")
return;
}
var total = Math.round((bill * tip));
total.toFix(2);
document.getElementById('totalText').innerHTML = total;
}
document.getElementById("c").onclick = function() {
totalBill();
};
body {
font-family: Roboto;
background: white;
/* fallback for old browsers */
/* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
}
#calculator {
height: 350px;
width: 360px;
margin: 0px auto;
background-color: yellow;
padding: 10px;
text-align: center;
}
input {
font-weight: bold;
}
h1 {
text-align: center;
background: #B03060;
color: white;
margin: 0;
padding: 10px 100px;
text-transform: uppercase;
font-size: 18px;
font-weight: normal;
border-top-left-radius: ;
border-top-right-radius: 20px;
}
button {
text-transform: uppercase;
font-weight: bold;
display: block;
margin: 30px auto;
background: red;
border-radius: 2px;
width: 200px;
height: 50px;
font-size: 14px;
color: white;
}
button:hover {
transition: 1s;
background: white;
color: black;
}
#result {
text-align: center;
}
p {
text-align: center;
padding-left: 20px;
}
<html lang="en" dir="ltr">
<link rel="stylesheet" href="style.css">
<body>
<div id="contain">
<h1>
<meta charset="utf-8">
<title>calculator</title>
How much is the tip?
</h1>
<div id="calculator">
<form>
<p>How much was your meal?</p>
<p>$<input id="cost" type="text" placeholder="Enter Cost"></p>
<p>How much do you want to tip?</p>
<p><input id="tip" type="text" placeholder="Enter percentage">%</p>
<button type="button" id="c">Calculate!</button>
</form>
</div>
</div>
<div id="result">
<sup>$</sup><span id="totalText">0.00</span>
</div>
</body>
</html>
Upvotes: 1
Views: 68
Reputation: 5055
You need to move your .getElementById
assignments inside your function, so that they're updated each time you run the function - right now you're only getting the .value()
once; when the page is loaded, and those inputs are empty
When you get these values in your function, they're going to be Strings. To use operators like +
on them without unexpected effects (joining the Strings together) you should turn them into Numbers - You could use either .parseFloat()
to keep decimals, or .parseInt()
to get just the interger
// Assuming an input of '12.50'
document.getElementById("cost").value // Returns '12.50'
parseFloat(document.getElementById("cost").value) // Returns 12.50
parseInt(document.getElementById("cost").value, 10) // Returns 12
The second , 10)
in parseInt
is specifying the base - Don't forget that or people will hate you
Finally, your Math was wrong for calculating the total paid; It should add the tip amount onto the total, and then display this value
There are other small issues and imperfections, but I leave those as a an exercise to the reader
function totalBill() {
var bill = parseFloat(document.getElementById("cost").value);
var tip = parseFloat(document.getElementById('tip').value);
if (tip > 0) {
tip = tip / 100;
}
if (bill === "" || tip === 0) {
alert("enter valid numbers")
return;
}
let total = Math.round(bill += bill * tip).toFixed(2);
document.getElementById('totalText').innerHTML = total;
}
document.getElementById("c").onclick = function() {
totalBill();
};
body {
font-family: Roboto;
background: white;
/* fallback for old browsers */
/* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
}
#calculator {
height: 350px;
width: 360px;
margin: 0px auto;
background-color: yellow;
padding: 10px;
text-align: center;
}
input {
font-weight: bold;
}
h1 {
text-align: center;
background: #B03060;
color: white;
margin: 0;
padding: 10px 100px;
text-transform: uppercase;
font-size: 18px;
font-weight: normal;
border-top-left-radius: ;
border-top-right-radius: 20px;
}
button {
text-transform: uppercase;
font-weight: bold;
display: block;
margin: 30px auto;
background: red;
border-radius: 2px;
width: 200px;
height: 50px;
font-size: 14px;
color: white;
}
button:hover {
transition: 1s;
background: white;
color: black;
}
#result {
text-align: center;
}
p {
text-align: center;
padding-left: 20px;
}
<div id="contain">
<h1>How much is the tip?</h1>
<div id="calculator">
<form>
<p>How much was your meal?</p>
<p>$<input id="cost" type="text" placeholder="Enter Cost"></p>
<p>How much do you want to tip?</p>
<p><input id="tip" type="text" placeholder="Enter percentage">%</p>
<button type="button" id="c">Calculate!</button>
</form>
<div id="result">
<sup>$</sup><span id="totalText">0.00</span>
</div>
</div>
</div>
Upvotes: 2