JavaScript and Ice Cream
Exposing Additional Form Elements
Additional relevant form elements are exposed based upon user input.
Here, this is achieved by having the entire form in the markup, with a certain section
hidden via CSS (display: none;). If "Yes" is chosen,
the display property is changed to "block" through JS.
Example
8.1 - Exposing Additional Form Elements - Example 8.1
<form method="post" name="ice_cream" id="ice_cream" action="https://cs12.net/form/submit.php">
<div>Would you like ice cream?
<label>
<input type="radio" name="want" id="ic_yes" value="yes"/>
Yes </label>
<label>
<input type="radio" name="want" id="ic_no" value="no"/>
No </label>
</div>
<fieldset id="icecream_options">
<legend>Ice Cream Options </legend>
<p>Cup or a Cone?
</p>
<label>
<input type="radio" id="container_cup" name="container" value="cup"/>
Cup </label>
<label>
<input type="radio" id="container_cone" name="container" value="cone"/>
Cone </label>
<p>Pick your toppings:
</p>
<label>
<input type="checkbox" name="toppings" id="toppings_wc" value="whipcream"/>
Whipped cream </label>
<label>
<input type="checkbox" name="toppings" id="toppings_jimmies" value="jimmies"/>
Jimmies </label>
<label>
<input type="checkbox" name="toppings" id="toppings_sprinkles" value="sprinkles"/>
Sprinkles </label>
<label>
<input type="checkbox" name="toppings" id="toppings_nuts" value="nuts"/>
Nuts </label>
<label>
<input type="checkbox" name="toppings" id="toppings_cherry" value="cherry"/>
Cherry </label> </fieldset>
<button type="submit">Submit Order </button>
</form> In style
element
(<style>) within head element:
#icecream_options {display:none;
background-color: #eee; margin-left: 2em;
} #icecream_options.show { display: block; } label { display: block; }
In
script element within head element (<script>):
document.addEventListener("DOMContentLoaded", function() {
let inputYes = document.getElementById('ic_yes');
inputYes.addEventListener("click", function() {
displayIceCreamOptions();
});
let inputNo = document.getElementById('ic_no');
inputNo.addEventListener("click", function() {
displayIceCreamOptions();
});
});
function displayIceCreamOptions() {
let divICO = document.getElementById('icecream_options');
let inputYes = document.getElementById('ic_yes');
if (inputYes.checked == true) {
divICO.classList.add("show");
} else {
divICO.classList.remove("show");
}
}
