JSFiddle - React, Tailwind, and code Playground
by Alaksandar Jesus Gene
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BMI Calculator</title>
<link rel="stylesheet" href="index.css">
</head>
<body>
<div class="container">
<h4>BMI Calculator</h4>
<div>
<label for="metricUnit"><input type="radio" name="unit" class="unit" value="metric" id="metricUnit" checked onchange="onUnitChange(this.value)">Metric Unit</label>
<label for="usUnit"><input type="radio" name="unit" class="unit" value="us" id="usUnit" onchange="onUnitChange(this.value)">US Unit</label>
</div>
<div class="metric-wrapper">
<div class="field-wrapper">
<div>Weight in KG</div>
<input type="text" class="weight">
</div>
<div class="field-wrapper">
<div>Height in Meters</div>
<input type="text" class="height">
</div>
</div>
<div class="usunit-wrapper">
<div class="field-wrapper">
<div>Weight in Pounds</div>
<input type="text" class="weight">
</div>
<div class="field-wrapper">
<div>Height in Inches</div>
<input type="text" class="height">
</div>
</div>
<div class="submit-wrapper">
<button id="submit" onclick="calculate()">Calculate</button>
</div>
<div class="result-wrapper">
<h4>Your BMI Value is <span class="result"></span></h4>
</div>
</div>
<script src="index.js"></script>
</body>
</html>
CSS
body{
margin:0;
padding:0;
}
.container{
width: 90%;
margin:0 auto;
}
.field-wrapper{
margin: 10px 0;
}
.usunit-wrapper{
display: none;
}
.result-wrapper{
display: none;
}
JavaScript
const metricWrapperElement = document.querySelector(".metric-wrapper");
const usunitWrapperElement = document.querySelector(".usunit-wrapper");
const resultWrapperElement = document.querySelector(".result-wrapper");
let ele,weight, height, bmi;
onUnitChange('metric');
function onUnitChange(value){
resultWrapperElement.style.display = 'none';
metricWrapperElement.style.display = value === 'metric'?'block':'none';
usunitWrapperElement.style.display = value === 'us'?'block':'none';
ele = metricWrapperElement.style.display !== 'none'?metricWrapperElement:usunitWrapperElement;
ele.querySelector('.weight').value = 0;
ele.querySelector('.height').value = 0;
}
function calculate(){
resultWrapperElement.style.display = 'none';
ele = metricWrapperElement.style.display !== 'none'?metricWrapperElement:usunitWrapperElement;
isMetric = metricWrapperElement.style.display !== 'none'?true:false;
weight = ele.querySelector('.weight').value;
height = ele.querySelector('.height').value;
if(!weight || isNaN(weight) ||!parseFloat(weight)){
alert("enter weight value");
return;
}
if(!height || isNaN(height) || !parseFloat(height)){
alert("enter height value");
return;
}
bmi = parseFloat(parseFloat(weight)/parseFloat(height)).toFixed(2);
if(isNaN(bmi)){
alert("Invalid values entered");
return;
}
if(!isMetric){
bmi = bmi * 703;
}
resultWrapperElement.style.display = 'block';
resultWrapperElement.querySelector(".result").innerHTML = bmi;
}