Я знаю, что на этот вопрос уже есть хороший и действительный ответ.
Следующее - просто результат того, что я играю с скрипкой, пытаюсь сократить ее и сделать ее более "отзывчивой".
Я удалил кнопку вычисления и теперь использую eval()
, чтобы допускать точное преобразование и вычислять значения полей ввода.
const qs=s=>document.querySelector(s);
evl=s=>{var v='', el=qs(s);
try{v=eval(el.value)||''} catch(er){v=''}
el.nextElementSibling.innerText=(v?'='+v.toFixed(2):v);
return v
}
var scale=[[18.5,"underweight"],
[25,"normal"],[30,"obese"],
[31,"seriously overweight"]];
qs("body").addEventListener("keyup",ev=>{if(ev.target.type!='text') return;
var txt, height=evl("#boxHeight"), weight=evl("#boxWeight");
if (height>0 && weight>0){
BMI=703*weight/(height*height);
scale.every(sc=>(txt=sc[1],BMI>sc[0]));
txt='Your BMI of '+BMI.toFixed(1)+" indicates<br>that you are "+txt+".";
} else txt='';
qs("#result").innerHTML=txt
});
body {
font-family: Arial, Helvetica, sans-serif;
background: url('BMI.jpg') center center fixed;
margin: 0 auto;
width: 600px;
border: 3px solid blue;
}
html {
background-color: #eee;
}
main {
padding: 0 2em 1em;
margin: 2em;
background-color: white;
}
h2 {
color: blue;
}
label {
float: left;
width: 12em;
text-align: right;
padding-bottom: .5em;
}
div {
width: 24em;
text-align: left;
padding-bottom: .5em;
font-size: 20px;
}
input {
margin-left: 1em;
margin-bottom: .5em;
}
span {margin-left:20px;
font-size:1.5ex;}
<main>
<h2>Body Mass Index Calculation Application</h2>
<label for="boxHeight">Enter height in inches:</label>
<input type='text' id='boxHeight' placeholder="value or formula"/><span id="one"></span><br>
<label for="boxWeight">Enter weight in pounds:</label>
<input type='text' id='boxWeight' placeholder="value or formula"/><span id="two"></span><br>
<div id="result"></div>
</main>