<form>
<table>
<tr>
<td>Distance:</td>
<td><input type="number" id="distance" onKeyUp="calculate();">m</td>
</tr>
<tr>
<td>Time:</td>
<td><input type="number" id="time" onKeyUp="calculate();">s</td>
</tr>
<tr>
<td>Speed:</td>
<td><span id="speed">21</span><span id="unit"> m/s</span></td>
</tr>
</table>
</form>
<script type="text/javascript">
var calculate = function() {
var distance = document.getElementById("distance").value;
var time = document.getElementById("time").value;
var speed = distance/time;}
if (speed=="Infinity" || speed=="NaN") {
document.getElementById("speed").innerHTML="Invalid Input";
document.getElementById("unit").innerHTML="";
} else {
document.getElementById("speed").innerHTML=speed;
}
</script>
I am making a simple speed calculator but it isn't working. The output comes [object HTMLSpanElement] Any help will be appreciated for I am new to javascript.
The variable speed in the last line is not the same as the one you set because it's in a different scope.
Try this:
var calculate = function() {
var distance = document.getElementById("distance").value;
var time = document.getElementById("time").value;
var speed = distance/time;
if (speed=="Infinity" || speed=="NaN"){
document.getElementById("speed").innerHTML="Invalid Input";
document.getElementById("unit").innerHTML="";
}else{
document.getElementById("speed").innerHTML=speed;
}
};
The reason is scope:
var calculate = function() {
var distance = document.getElementById("distance").value;
var time = document.getElementById("time").value;
var speed = distance/time;
}
// speed is not within the right scope anymore
// because you closed the function above!
if (speed=="Infinity" || speed=="NaN"){
document.getElementById("speed").innerHTML="Invalid Input";
document.getElementById("unit").innerHTML="";
}else{
document.getElementById("speed").innerHTML=speed;
}
Because your script runs in document, the value of speed is resolved as the element <span id="speed" ... >.
Move the last if-statement inside the function:
var calculate = function() {
var distance = document.getElementById("distance").value;
var time = document.getElementById("time").value;
var speed = distance/time;
if (speed=="Infinity" || speed=="NaN"){
document.getElementById("speed").innerHTML="Invalid Input";
document.getElementById("unit").innerHTML="";
}else{
document.getElementById("speed").innerHTML=speed;
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With