简体   繁体   English

我怎样才能更正 sum 函数?

[英]how can I correct sum function?

I wrote my function that calculate heart rate target for sports, every things is true but in switch function, first case when every thing is do, last sum in function don't do.我写了我的计算运动心率目标的函数,每件事都是正确的,但在 switch 函数中,第一种情况是每件事都做,函数中的最后一个总和不做。 for example if someone have 20 years old and 50 rest heart rate in minutes.they heart rate target have to be 102.5, but it's 53 because formula don't do last sum.例如,如果某人有 20 岁和 50 分钟的静息心率。他们的心率目标必须是 102.5,但它是 53,因为公式不会做最后的总和。 (mhr*0.35+hr)....hr don't sum. (mhr*0.35+hr)....hr 不求和。

 function heartR() { var y = document.getElementsByName("year5")[0].value; var hr = document.getElementsByName("RBR")[0].value; var gole = document.getElementsByName("gole")[0]; var a3 = gole.options[gole.selectedIndex].text; var mhr = (220 - y) - hr; switch (a3) { case "تمرین برای افراد دارای بیماریهای خاص": document.getElementById("heartR").innerHTML = " MinHR= " + (mhr * 0.35 + hr); break; case "تمرین برای چربی سوزی": document.getElementById("heartR").innerHTML = " MinHR= " + (mhr * 0.50 + hr); break; default: document.getElementById("bmr").innerHTML = "شما شدت فعالیت را انتخاب نکرده اید"; } }
 <div class="sectionmenu"> <form action="#" target="_self" method="get"> <fieldset> <legend>برآورد ضربان قلب هدف</legend> سن (years)<br> <input type="number" name="year5" placeholder="30"><br> ضربان قلب استراحت (HR/min)<br> <input type="number" name="RBR" placeholder="60"><br> هدف شما<br> <select name="gole"> <option value="special"> تمرین برای افراد دارای بیماریهای خاص</option> <option value="fat-burn"> تمرین برای چربی سوزی</option> <option value="aerobic"> تمرینات هوازی و استقامتی</option> <option value="vo2max"> تمرین برای تقویت حداکثر اکسیژن مصرفی</option> <option value="anaerobic"> تمرین برای افزایش ظرفیت بی هوازی</option> </select><br><br> <input type="button" value="محاسبه" onClick="heartR()" class="button"><br> <p id="heartR"> </p> </fieldset> </form> </div>

The value of hr & mhr is probably considered as a string, therefore JS automatically concatenates the inputs. hr & mhr 的值可能被认为是一个字符串,因此 JS 会自动连接输入。 Try parseInt() to convert it into number and then calculate the sum as shown below:尝试 parseInt() 将其转换为数字,然后计算总和,如下所示:

console.log(parseInt(mhr)*0.35+parseInt(hr));

Here are a few corrections:这里有一些更正:

  • Element with id bmr does not exist, so your default case throws an exception. id 为bmr元素不存在,因此您的default情况会引发异常。
  • Use the option value instead of its text property to identify the selected option in your switch statement使用选项value而不是它的text属性来标识 switch 语句中的选定选项
  • Do not use a number as the placeholder for your number inputs, it is misleading, instead set the initial value with the value property不要使用数字作为数字输入的占位符,它会产生误导,而是使用value属性设置初始值
  • Convert your input values to numbers using the + operator.使用+运算符将输入值转换为数字。

And the corrected snippet:以及更正的片段:

 function heartR() { var y = +document.getElementsByName("year5")[0].value; var hr = +document.getElementsByName("RBR")[0].value; var gole = document.getElementsByName("gole")[0]; var a3 = gole.options[gole.selectedIndex].value; var mhr = (220 - y) - hr; switch (a3) { case 'special': document.getElementById("heartR").innerHTML = " MinHR= " + (mhr * 0.35 + hr); break; case 'fat-burn': document.getElementById("heartR").innerHTML = " MinHR= " + (mhr * 0.50 + hr); break; default: document.getElementById("bmr").innerHTML = "شما شدت فعالیت را انتخاب نکرده اید"; } }
 <div class="sectionmenu"> <form action="#" target="_self" method="get"> <fieldset> <legend>برآورد ضربان قلب هدف</legend> سن (years)<br> <input type="number" name="year5" value="30"><br> ضربان قلب استراحت (HR/min)<br> <input type="number" name="RBR" value="60"><br> هدف شما<br> <select name="gole"> <option value="special"> تمرین برای افراد دارای بیماریهای خاص</option> <option value="fat-burn"> تمرین برای چربی سوزی</option> <option value="aerobic"> تمرینات هوازی و استقامتی</option> <option value="vo2max"> تمرین برای تقویت حداکثر اکسیژن مصرفی</option> <option value="anaerobic"> تمرین برای افزایش ظرفیت بی هوازی</option> </select><br><br> <input type="button" value="محاسبه" onClick="heartR()" class="button"><br> <p id="heartR"></p> <p id="bmr"></p> </fieldset> </form> </div>

 function heartR() { var y = document.getElementsByName("year5")[0].value; var hr = document.getElementsByName("RBR")[0].value; var gole = document.getElementsByName("gole")[0]; var a3 = gole.options[gole.selectedIndex].text; var mhr = (220 - y) - hr; switch (a3) { case "تمرین برای افراد دارای بیماریهای خاص": document.getElementById("heartR").innerHTML = " MinHR= " + (mhr * 0.35 + hr); break; case "تمرین برای چربی سوزی": document.getElementById("heartR").innerHTML = " MinHR= " + (mhr * 0.50 + hr); break; default: document.getElementById("bmr").innerHTML = "شما شدت فعالیت را انتخاب نکرده اید"; } }
 <div class="sectionmenu"> <form action="#" target="_self" method="get"> <fieldset> <legend>برآورد ضربان قلب هدف</legend> سن (years)<br> <input type="number" name="year5" placeholder="30"><br> ضربان قلب استراحت (HR/min)<br> <input type="number" name="RBR" placeholder="60"><br> هدف شما<br> <select name="gole"> <option value="special"> تمرین برای افراد دارای بیماریهای خاص</option> <option value="fat-burn"> تمرین برای چربی سوزی</option> <option value="aerobic"> تمرینات هوازی و استقامتی</option> <option value="vo2max"> تمرین برای تقویت حداکثر اکسیژن مصرفی</option> <option value="anaerobic"> تمرین برای افزایش ظرفیت بی هوازی</option> </select><br><br> <input type="button" value="محاسبه" onClick="heartR()" class="button"><br> <p id="heartR"> </p> </fieldset> </form> </div>

 function heartR(){ var y= document.getElementsByName("year5")[0].value; var hr= document.getElementsByName("RBR")[0].value; var gole = document.getElementsByName("gole")[0]; var a3=gole.options[gole.selectedIndex].value; var mhr= (220 - y)-hr; switch (a3) { case 'special': document.getElementById("heartR").innerHTML= " MinHR= " + (mhr*0.35+parseInt(hr)) + "<br/>" + " MaxHR = " + (mhr*0.45+parseInt(hr)); break; case 'fat-burn': document.getElementById("heartR").innerHTML= " MinHR= " + (mhr*0.50+parseInt(hr)) + "<br/>" + " MaxHR = " + (mhr*0.60+parseInt(hr)); break; case 'aerobic': document.getElementById("heartR").innerHTML= " MinHR= " + (mhr*0.55+parseInt(hr)) + "<br/>" + " MaxHR = " + (mhr*0.70+parseInt(hr)); break; case 'vo2max': document.getElementById("heartR").innerHTML= " MinHR= " + (mhr*0.75+parseInt(hr)) + "<br/>" + " MaxHR = " + (mhr*0.85+parseInt(hr)); break; case 'anaerobic': document.getElementById("heartR").innerHTML= " MinHR= " + (mhr*0.85+parseInt(hr)) + "<br/>" + " MaxHR = " + (mhr*1+parseInt(hr)); break; default: document.getElementById("heartR").innerHTML="شما شدت فعالیت را انتخاب نکرده اید"; } }
 <div class="sectionmenu"> <form action="#" target="_self" method="get"> <fieldset> <legend>برآورد ضربان قلب هدف</legend> سن (years)<br> <input type="number" name="year5" value="30"><br> ضربان قلب استراحت (HR/min)<br> <input type="number" name="RBR" value="60"><br> هدف شما<br> <select name="gole"> <option value="special"> تمرین برای افراد دارای بیماریهای خاص</option> <option value="fat-burn"> تمرین برای چربی سوزی</option> <option value="aerobic"> تمرینات هوازی و استقامتی</option> <option value="vo2max"> تمرین برای تقویت حداکثر اکسیژن مصرفی</option> <option value="anaerobic"> تمرین برای افزایش ظرفیت بی هوازی</option> </select><br><br> <input type="button" value="محاسبه" onClick="heartR()" class="button"><br> <p id="heartR"> </p> </fieldset> </form> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM