2019-12-07 17:11:14 -07:00
---
2019-12-07 17:11:14 -07:00
id: 5ddb965c65d27e1512d44dca
2019-12-07 17:11:14 -07:00
title: Part 51
challengeType: 0
---
## Description
< section id = 'description' >
2019-12-07 17:11:14 -07:00
When the user clicks the "Add Entry" button, they should be provided with additional text inputs to enter in a food name and calorie amount. These will be included in the `calculate()` function.
2019-12-07 17:11:14 -07:00
2019-12-07 17:11:14 -07:00
In the HTML document, notice that the "Add Entry" button has the `id` attribute `add` :
```html
< button type = "button" class = "btn-add" id = "add" >
```
Get a reference to the `document` element with the `id` attribute `add` . This is similar to the reference to the `calorie-form` element that you wrote near the top of this document.
2019-12-07 17:11:14 -07:00
< / section >
## Instructions
< section id = 'instructions' >
< / section >
## Tests
< section id = 'tests' >
```yml
tests:
- text: See description above for instructions.
2019-12-07 17:11:14 -07:00
testString: assert( code.replace(/\s/g, '').match(/document\.getElementById\([\'\"\`]add[\'\"\`]\)/) );
2019-12-07 17:11:14 -07:00
```
< / section >
## Challenge Seed
< section id = 'challengeSeed' >
< div id = 'html-seed' >
```html
< script >
document.getElementById('calorie-form').onsubmit = calculate;
function calculate(e) {
e.preventDefault();
const total = Array.from(document.getElementsByClassName('cal-control'))
.map(meal => Number(meal.value))
.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
const maxCalories = document.getElementById('female').checked ? 2000 : 2500;
const difference = total - maxCalories;
const surplusOrDeficit = difference > 0 ? 'Surplus' : 'Deficit';
const output = document.getElementById('output');
const result = document.createElement('h3');
result.className = 'green-text';
const resultText = document.createTextNode(
`${Math.abs(difference)} Calorie ${surplusOrDeficit}`
);
result.appendChild(resultText);
output.appendChild(result);
const line = document.createElement('hr');
output.appendChild(line);
const recommended = document.createElement('h4');
const recommendedText = document.createTextNode(
`${maxCalories} Recommended Calories`
);
recommended.appendChild(recommendedText);
output.appendChild(recommended);
const consumed = document.createElement('h4');
consumed.innerHTML = `${total} Consumed Calories` ;
output.appendChild(consumed);
output.setAttribute('class', 'bordered-class');
output.style.backgroundColor = '#FFF9C4 ';
}
< / script >
```
< / div >
### Before Test
< div id = 'html-setup' >
```html
<!DOCTYPE html>
< html >
< head >
< meta charset = "utf-8" / >
< title > < / title >
< meta name = "description" content = "" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1" / >
< link rel = "stylesheet" href = "styles.css" / >
< / head >
< body >
< div class = "container" >
< form id = "calorie-form" >
< h2 class = "center" > Calorie Counter< / h2 >
< div class = "grid" >
< legend > Sex< / legend >
< div >
< input type = "radio" name = "sex" id = "female" value = "F" checked / >
< label for = "female" >
Female (2,000 calories)
< / label >
< div >
< input type = "radio" name = "sex" id = "male" value = "M" / >
< label for = "male" >
Male (2,500 calories)
< / label >
< / div >
< / div >
< / div >
< div class = "grid" id = "entries" >
Breakfast
< input
type="number"
min="0"
class="cal-control"
id="breakfast"
/>< br / >
Lunch
< input type = "number" min = "0" class = "cal-control" id = "lunch" / > < br / >
Dinner < input type = "number" min = "0" class = "cal-control" id = "dinner" / >
< / div >
< button type = "button" class = "btn-add" id = "add" >
Add Entry
< / button >
< button type = "submit" class = "btn-solid" id = "calculate" >
Calculate
< / button >
< button type = "button" class = "btn-outline" id = "clear" >
Clear
< / button >
< / form >
< div id = "output" > < / div >
< / div >
< / body >
< / html >
```
< / div >
### After Test
< div id = 'html-teardown' >
```html
< / body >
< / html >
```
< / div >
< / section >
## Solution
< section id = 'solution' >
```html
< script >
document.getElementById('calorie-form').onsubmit = calculate;
function calculate(e) {
e.preventDefault();
const total = Array.from(document.getElementsByClassName('cal-control'))
.map(meal => Number(meal.value))
.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
const maxCalories = document.getElementById('female').checked ? 2000 : 2500;
const difference = total - maxCalories;
const surplusOrDeficit = difference > 0 ? 'Surplus' : 'Deficit';
const output = document.getElementById('output');
const result = document.createElement('h3');
result.className = 'green-text';
const resultText = document.createTextNode(
`${Math.abs(difference)} Calorie ${surplusOrDeficit}`
);
result.appendChild(resultText);
output.appendChild(result);
const line = document.createElement('hr');
output.appendChild(line);
const recommended = document.createElement('h4');
const recommendedText = document.createTextNode(
`${maxCalories} Recommended Calories`
);
recommended.appendChild(recommendedText);
output.appendChild(recommended);
const consumed = document.createElement('h4');
consumed.innerHTML = `${total} Consumed Calories` ;
output.appendChild(consumed);
output.setAttribute('class', 'bordered-class');
output.style.backgroundColor = '#FFF9C4 ';
}
2019-12-07 17:11:14 -07:00
document.getElementById('add');
2019-12-07 17:11:14 -07:00
< / script >
```
< / section >