Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
110 views
in Technique[技术] by (71.8m points)

c# - How to display JavaScript calculation in html code?

I am trying to show the results of my calculation on the webpage. However I am unable to figure out how to display it.

It is for a assignment. I am currently stuck. I would appreciate the help.

Here is the code running the calculation:

// Convert into proper units
inches = (feet * 12) + inches;

// Calculate BMR
var BMR = 0;

if (gender == "Male") {
    BMR = 66 + (6.2 * pounds) + (12.7 * inches) - (6.76 * age); 
}
else {
    BMR = 655.1 + (4.35 * pounds) + (4.7 * inches) - (4.7 * age);
}

// Calculate TDEE
var TDEE = 0;

switch (activityLevel) {
    case "activityLevel1":
        TDEE = BMR * 1.2;
        break;
    case "activityLevel2":
        TDEE = BMR * 1.375;
        break;
    case "activityLevel3":
        TDEE = BMR * 1.55;
        break;
    case "activityLevel4":
        TDEE = BMR * 1.725;
        break;
    case "activityLevel5":
        TDEE = BMR * 1.9;
        break;
    default:
        TDEE = BMR * 1.2;
}

// Display BMR & TEE on the page
document.getElementById('bmr').innerHTML = '<p><b>BMR: </b>' + BMR.toFixed() + '</p > ';
document.getElementById('tdee').innerHTML = '<p><b>TDEE: </b>' + TDEE.toFixed() + '</p > ';

return false;

I'd like the results to show in-between bmr div and tdee div. Here is the code below. I do not know how to show the results:

        <br />
        </p>
        <br />
        <input type="submit" value="Calculate BMR" />
        <br />
        <div id="bmr"></div>
        <div id="tdee"></div>
        


    </form>

</article>




<script type="text/javascript" src="Assignment1.js"></script>
<script type="text/javascript">
    var form = document.getElementById("userSex");
    form.addEventListener('submit', BMR);
</script>
question from:https://stackoverflow.com/questions/66068821/how-to-display-javascript-calculation-in-html-code

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Instead of converting units, just determine if you are using Metric/Imperial before you do anything else.

Note: Looks like you are using the "Mifflin St Jeor" equation.

const activityFactors = [ 1.2, 1.375, 1.55, 1.725, 1.9 ];

const calculateBmr = (mode, gender, age, weight, height) => {
  const factor = gender === 'Female' ? -161 : 5;
  switch (mode) {
    case 'Metric':
      return (10 * weight) + (6.25 * height) - (5 * age) + factor;
    case 'Imperial':
      return (4.536 * weight) + (15.88 * height) - (5 * age) + factor;
  }
  throw new Error(`Unknown mode "${mode}"`);
};

const calculateTdee = (bmr, activityLevel) => {
  return bmr * activityFactors[+activityLevel]
};

Full example

// Constants
const form = document.forms['bmr-calculator'];
const resultBmr = document.querySelector('#result-bmr');
const resultTdee = document.querySelector('#result-tdee');

// Forward declaration
const main = () => {
  form.addEventListener('submit', e => calculate(e, {
    bmr: resultBmr,
    tdee: resultTdee
  }));
  setFormValues(form, {
    mode: 'Imperial',
    age: 18,
    weight: 180,      // 180 lbs
    height: 60,       // 6' 00"
    activityLevel: 1  // Light activity
  });
};

// Begin helper functions
const setFormValues = (form, values) =>
  Object.entries(values).forEach(([name, value]) => {
    form.elements[name].value = value;
  });
  
const fieldMap = (form) => Object.fromEntries([...form.elements]
  .map((input) => {
    switch (input.tagName.toLowerCase()) {
      case 'input':
        const type = input.getAttribute('type');
        switch (type) {
          case 'number':
            return [input.name, +input.value];
        }
    }
    return [input.name, input.value];
  })
  .filter(([key]) => key));

// Begin calculator
const activityFactors = [ 1.2, 1.375, 1.55, 1.725, 1.9 ];

const calculateBmr = (mode, gender, age, weight, height) => {
  const factor = gender === 'Female' ? -161 : 5;
  switch (mode) {
    case 'Metric':
      return (10 * weight) + (6.25 * height) - (5 * age) + factor;
    case 'Imperial':
      return (4.536 * weight) + (15.88 * height) - (5 * age) + factor;
  }
  throw new Error(`Unknown mode "${mode}"`);
};

const calculateTdee = (bmr, activityLevel) => {
  return bmr * activityFactors[+activityLevel]
};

const calculate = (e, hooks) => {
  const form = e.target;
  const fields = fieldMap(form);
  const { mode, gender, age, weight, height, activityLevel } = fields;
  const bmr = calculateBmr(mode, gender, age, weight, height);
  const tdee = calculateTdee(bmr, activityLevel);
  hooks.bmr.textContent = bmr.toFixed(2);
  hooks.tdee.textContent = tdee.toFixed(2);
};

// Call main
main();
form
.results {
  display: flex;
  flex-direction: column;
  width: 25vw;
}

.form-field,
.result-row  {
  display: grid;
  grid-auto-flow: column;
  grid-template-columns: 8em 1fr;
  margin-bottom: 0.33em;
}

.form-field > label,
.result-row > label {
  font-weight: bold;
}

.form-field > label:after,
.result-row > label:after {
  content: ':';
}
<form name="bmr-calculator" onsubmit="return false;">
  <div class="form-field">
    <label>Mode</label>
    <select name="mode">
      <option value="Metric">Metric</option>
      <option value="Imperial">Imperial</option>
    </select>
  </div>
  <div class="form-field">
    <label>Gender</label>
    <select name="gender">
      <option value="Male">Male</option>
      <option value="Female">Female</option>
    </select>
  </div>
  <div class="form-field">
    <label>Age</label>
    <input type="number" min="0" name="age" />
  </div>
  <div class="form-field">
    <label>Weight (kg/lbs)</label>
    <input type="number" min="0.0" step="0.01" name="weight" />
  </div>
  <div class="form-field">
    <label>Height (cm/in)</label>
    <input type="number" min="0.0" step="0.01" name="height" />
  </div>
  <div class="form-field">
    <label>Activity Level</label>
    <select name="activityLevel">
      <option value="0">Sedentary (Little or no exercise)</option>
      <option value="1">Light Activity (1-3 days/week)</option>
      <option value="2">Moderate Activity (3-5 days/week)</option>
      <option value="3">Very Activity (6-7 days/week)</option>
      <option value="4">Super Active (Physical job)</option>
    </select>
  </div>
  <input type="submit" value="Calculate BMR" />
</form>
<hr />
<div class="results">
  <div class="result-row">
    <label>BMR</label>
    <span id="result-bmr"></span>
  </div>
  <div class="result-row">
    <label>TDEE</label>
    <span id="result-tdee"></span>
  </div>
</div>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...