<div class="wrapper">
<div id="name-form" class="form">
<label for="name">Name</label><br/>
<input id="name" name="name" type="text"/><br/>
<button id="submit-name">Next</button>
<div id="name-error" class="error"></div>
</div>
<div id="email-form" class="form hidden">
<div id="email-back" class="back">Back</div>
<label for="email">Email</label><br/>
<input id="email" name="email" type="email"/><br/>
<button id="submit-email">Next</button>
<div id="email-error" class="error"></div>
</div>
<div id="dob-form" class="form hidden">
<div id="dob-back" class="back">Back</div>
<label for="dob">Date of Birth</label><br/>
<input id="dob" name="dob" type="date"/><br/>
<button id="submit-dob">Next</button>
<div id="dob-error" class="error"></div>
</div>
<div id="password-form" class="form hidden">
<div id="password-back" class="back">Back</div>
<label for="password">Password</label><br/>
<input id="password" name="password" type="password"/><br/>
<button id="submit-password">Submit</button>
<div id="password-error" class="error"></div>
</div>
</div>
.wrapper {
border: 1px solid black;
width: 250px;
height: 200px;
padding: 30px;
margin: 200px auto;
position: relative;
}
.hidden {
display: none;
}
.form {
position: relative;
}
.back {
color : blue;
cursor: pointer;
position: absolute;
top: 0;
}
label {
position: absolute;
top: 60px;
}
input {
margin: 5px 0 20px;
position: absolute;
top: 80px;
}
button {
position: absolute;
top: 130px;
}
.error {
position: absolute;
top: 170px;
color: red;
}
/*
* https://frontendeval.com/questions/multi-step-form
*
* Create a single submittable form that spans multiple screens
*/
const nameForm = document.getElementById("name-form");
const emailForm = document.getElementById("email-form");
const dobForm = document.getElementById("dob-form");
const passwordForm = document.getElementById("password-form");
const name = document.getElementById("name");
const email = document.getElementById("email");
const dob = document.getElementById("dob");
const password = document.getElementById("password");
const nameButton = document.getElementById("submit-name");
const emailButton = document.getElementById("submit-email");
const dobButton = document.getElementById("submit-dob");
const passwordButton = document.getElementById("submit-password");
const nameError = document.getElementById("name-error");
const emailError = document.getElementById("email-error");
const dobError = document.getElementById("dob-error");
const passwordError = document.getElementById("password-error");
const emailBack = document.getElementById("email-back");
const dobBack = document.getElementById("dob-back");
const passwordBack = document.getElementById("password-back");
nameButton.addEventListener("click", () => {
if (!name.value) {
nameError.textContent = "Enter name to proceed.";
return;
}
nameError.textContent = "";
nameForm.classList.add("hidden");
emailForm.classList.remove("hidden");
});
emailButton.addEventListener("click", () => {
if (!email.value) {
emailError.textContent = "Enter email to proceed.";
return;
}
if (!email.value.includes("@")) {
emailError.textContent = "Email address is not valid.";
return;
}
emailError.textContent = "";
emailForm.classList.add("hidden");
dobForm.classList.remove("hidden");
});
dobButton.addEventListener("click", () => {
if (!dob.value) {
dobError.textContent = "Enter date of birth to proceed.";
return;
}
dobError.textContent = "";
dobForm.classList.add("hidden");
passwordForm.classList.remove("hidden");
});
passwordButton.addEventListener("click", () => {
if (!password.value) {
passwordError.textContent = "Enter password to proceed.";
return;
}
if (password.value.length < 8) {
passwordError.textContent = "Password should have atleast 8 characters.";
return;
}
passwordError.textContent = "";
dobForm.classList.add("hidden");
handleSubmit({
name: name.value,
email: email.value,
dob: dob.value,
password: password.value
});
});
const handleSubmit = (userInfo) => {
console.log("Name: ", userInfo.name);
console.log("Email: ", userInfo.email);
console.log("Date of Birth: ", userInfo.dob);
console.log("Password: ", userInfo.password);
};
emailBack.addEventListener("click", () => {
nameForm.classList.remove("hidden");
emailForm.classList.add("hidden");
});
dobBack.addEventListener("click", () => {
emailForm.classList.remove("hidden");
dobForm.classList.add("hidden");
});
passwordBack.addEventListener("click", () => {
dobForm.classList.remove("hidden");
passwordForm.classList.add("hidden");
});
View Compiled
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.