<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
Run Pen

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.