I have two HTML form fields in my application, one displays a dropdown for users to select if they are over 18 and the second field is for parent's name.
I want to make the parent_name
field required
only if the user is under 18. Here's my current code for the appropriate form parts.
<div>
<label for="over_18">Over 18?</label>
<select id="over_18" required multiple>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select>
</div>
<div class="form-group">
<label>Parent Name</label>
<input type="parent_name" id="parent_name" required>
</div>
I've created the following function so far, but I'm unable to understand how to use it.
function updateRequirements() {
var over_18 = document.getElementById('over_18').value;
if (over_18 = 'No') {
doccument.getElementById('parent_name').required = true;
} else {
doccument.getElementById('parent_name').required = false;
}
}
Update:
How to achieve the same result if the first input is of type date
? So, now the second input is required only if the age provided in the first input is less than 18.
You can update the required
attribute of the parent_name
input every time the over_18
selection changes.
Few notes:
type="parent_name"
is invalid, it should be type="text"
.multiple
on select
by mistake, it doesn't make any sense here.select
to be Select Age
with value=""
, so now you don't need required
on parent_name
in your HTML.const select = document.getElementById("over_18");
const parentInput = document.getElementById("parent_name");
const form = document.querySelector("form");
select.addEventListener("change", (e) => {
if (e.target.value === "No") {
parentInput.required = false;
} else {
parentInput.required = true;
}
});
form.addEventListener("submit", (e) => {
e.preventDefault();
console.log("Submitted");
});
<form>
<div>
<label for="over_18">Over 18? </label>
<select id="over_18" required>
<option value="">Select Age</option>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select>
</div>
<div>
<label for="parent_name">Parent Name</label>
<input type="input" id="parent_name">
</div>
<button type="submit">Submit</button>
</form>
Update based on OP's comment:
If age
is a date
input:
required
attribute accordingly.const ageInput = document.getElementById("age");
const parentInput = document.getElementById("parent_name");
const form = document.querySelector("form");
ageInput.addEventListener("change", (e) => {
const date = new Date(e.target.value),
birthYear = date.getFullYear(),
birthMonth = date.getMonth(),
birthDate = date.getDate(),
currYear = new Date().getFullYear(),
currMonth = new Date().getMonth(),
currDate = new Date().getDate(),
years = currYear - birthYear,
isAdult =
years > 18 ||
(years === 18 && currMonth > birthMonth) ||
(years === 18 && currMonth === birthMonth && currDate >= birthDate);
console.log("Is Adult?", isAdult);
if (isAdult) {
parentInput.required = false;
} else {
parentInput.required = true;
}
});
form.addEventListener("submit", (e) => {
e.preventDefault();
console.log("Submitted");
});
<form>
<div>
<label for="age">Age</label>
<input type="date" id="age" required>
</div>
<div class="form-group">
<label for="parent_name">Parent Name</label>
<input type="text" id="parent_name">
</div>
<button type="submit">Submit</button>
</form>
You can use something like this :
function updateRequirements() {
var over_18 = document.getElementById('over_18').value;
if (over_18 === 'No') {
doccument.getElementById('parent_name').setAttribute('required', true);
} else {
doccument.getElementById('parent_name').removeAttribute('required');
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With