如何校正求和函数?

时间:2019-03-21 09:52:13

标签: javascript html

我编写了计算运动心率目标的函数,每件事都是正确的,但是在切换功能中,每件事都在做的第一种情况,函数中的最后一笔不做。例如,如果某人有20岁,并且在几分钟内有50个静息心率,则他们的心率目标必须为102.5,但是它的值为53,因为公式不做最后一笔总和。 (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>

3 个答案:

答案 0 :(得分:0)

hr&mhr的值可能被视为字符串,因此JS自动将输入连接起来。 尝试parseInt()将其转换为数字,然后计算总和,如下所示:

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

答案 1 :(得分:0)

以下是一些更正:

  • 标识为bmr的元素不存在,因此您的default情况引发异常。
  • 使用选项value而不是其text属性来标识switch语句中的所选选项
  • 请勿将数字用作数字输入的占位符,这会误导您,而是使用value属性设置初始值
  • 使用+运算符将输入值转换为数字。

和更正的代码段:

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>

答案 2 :(得分:0)

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>