Gegara kemaren bikin kalkulator BMI, jadi terpikir sekalian bikin kalkulator untuk menghitung berat badan ideal.. Banyak sekali faktor yang mempengaruhi sih, ada beberapa formula yang bisa digunakan untuk menghitung nya, meski tidak ada yang sempurna, namun bisa digunakan untuk referensi awal..
Formula yang akan digunakan mencakup BMI range formula, Devine formula, Robinson formula, Miller formula, Hamwi formula, Lemmens formula, dan Broca formula.. Penjelasan dari masing-masing nya cari sendiri aja ya artikel dan/atau jurnal nya hehe…
// BMI range formula
function bmi(obj){
var beratMinimal = Math.pow( (obj.tinggi/100), 2 ) * 18.5,
beratMaksimal = Math.pow( (obj.tinggi/100), 2 ) * 24.999999;
return beratMinimal.toFixed(2) + '</strong> Kg sampai <strong>' + beratMaksimal.toFixed(2);
}
// Broca formula
function broca(obj){
var normal = (parseInt(obj.tinggi) - 100);
return (normal - (normal * (obj.gender ? 0.1 : 0.15))).toFixed(2);
}
// Devine formula
function devine(obj){
var inch = obj.tinggi / 2.54,
baseWeight = obj.gender ? 50 : 45.5,
baseFeet = 12 * 5,
inchOver5Feet = (inch > baseFeet ? inch - baseFeet : 0);
return (baseWeight + (inchOver5Feet * 2.3)).toFixed(2);
}
// Robinson formula
function robinson(obj){
var inch = obj.tinggi / 2.54,
baseWeight = obj.gender ? 52 : 49,
baseFeet = 12 * 5,
inchOver5Feet = (inch > baseFeet ? inch - baseFeet : 0);
return (baseWeight + (inchOver5Feet * (obj.gender ? 1.9 : 1.7))).toFixed(2);
}
// Miller formula
function miller(obj){
var inch = obj.tinggi / 2.54,
baseWeight = obj.gender ? 56.2 : 53.1,
baseFeet = 12 * 5,
inchOver5Feet = (inch > baseFeet ? inch - baseFeet : 0);
return (baseWeight + (inchOver5Feet * (obj.gender ? 1.41 : 1.36))).toFixed(2);
}
// Hamwi formula
function hamwi(obj){
var inch = obj.tinggi / 2.54,
baseWeight = obj.gender ? 106 : 100,
baseFeet = 12 * 5,
inchOver5Feet = (inch > baseFeet ? inch - baseFeet : 0),
lb = baseWeight + (inchOver5Feet * (obj.gender ? 6 : 5));
return lb*0.45359233;
}
// Lemmens formula
function lemmens(obj){
return (22 * Math.pow( (obj.tinggi/100), 2 )).toFixed(2);
}
Seperti kalkulator bmi kemarin, saya sengaja menggunakan form tanpa tombol submit agar langsung menghitung aja.. Kali ini ada penambahan input berupa jenis kelamin dan formula yang diinginkan.. input berat ditiadakan, karena kita ingin menghitung berat badan idealnya..
<form id="form">
<div class="form-group">
<label>Jenis kelamin kamu:</label>
<div id="gender" class="input-group">
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="gender" id="gender1" value="Pria" checked="checked">
<label class="form-check-label" for="gender1">Lelaki</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="gender" id="gender2" value="wanita">
<label class="form-check-label" for="gender2">Perempuan</label>
</div>
</div>
</div>
<div class="form-group">
<label>Pilih formula:</label>
<div class="input-group">
<select class="form-control form-control-lg" id="formula">
<option value="BMI range formula">BMI range formula</option>
<option value="Devine formula">Devine formula</option>
<option value="Robinson formula">Robinson formula</option>
<option value="Miller formula">Miller formula</option>
<option value="Hamwi formula">Hamwi formula</option>
<option value="Lemmens formula">Lemmens formula</option>
<option value="Broca formula">Broca formula</option>
<option value="semua">Semua formula</option>
</select>
</div>
</div>
<div class="form-group">
<label>Tinggi badan kamu:</label>
<div class="input-group">
<input type="number" id="tinggi" class="form-control form-control-lg">
<div class="input-group-append">
<span class="input-group-text">Cm</span>
</div>
</div>
</div>
<div id="hasil"></div>
</form>
dan kondisi untuk mencegah firing twice..
var tinggi = $('#tinggi').val();
// Deteksi jika input tinggi selesai diketik
$('#tinggi').keyup(function(){
tinggi = $('#tinggi').val();
validate({
tinggi: parseInt(tinggi),
gender: $('#gender1').is(':checked') ? true : false,
formula: $('#formula').val()
});
});
// Deteksi jika perubahan nilai input
$('#tinggi, #gender input, #formula').change(function(){
// Untuk menghindari dobel proses karena pengaruh keyup, maka perlu diset kondisi
var change = true,
tinggiSaatIni = $('#tinggi').val();
if($(this).attr('id') == 'tinggi' && tinggiSaatIni == tinggi) {
change = false;
}
if(change){
validate({
tinggi: parseInt(tinggiSaatIni),
gender: $('#gender1').is(':checked') ? true : false,
formula: $('#formula').val()
});
}
});
Saya juga menggunakan validasi untuk nilai minimum dari tinggi badan..
function validate(obj){
$('#tinggi').val() > 80 ? hitung(obj) : $('#hasil').html('').hide();
}
Untuk script utuh nya bisa dilihat di “github.com/reggarantai/kalkulator-berat-badan-ideal”..
Dan kalkulator ini saya pasang juga di artikel: Memilih diet untuk mengurangi berat badan sebagai tambahan.. Di artikel itu menggunakan ReactJS sih bukan jQuery, tp untuk logic nya sama saja..
Semoga ada manfaat nya ya..
Wassalaamu’alaikum..