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;
}