Установите переключатель в многоступенчатой форме с помощью Javascript

#javascript #php #sql

#javascript #php #sql

Вопрос:

Я хочу проверить многостраничную форму с помощью Js. Вот каким я хочу видеть код, когда я нажимаю «далее», я хочу, чтобы он проверял, был ли установлен переключатель или нет. Если нет, то отобразите всплывающее окно с предупреждением. Многостраничная форма уже работает, но проблема здесь в том, что я не могу проверить переключатель на каждой странице.

Надеюсь, кто-нибудь может помочь мне решить эту проблему, так как я уже несколько дней пытаюсь решить эту проблему, но я не знаю, как это сделать. Заранее спасибо.

HTML

 lt;form class="form" action="" method="post"gt;  lt;!-- Progress bar --gt;  lt;div class="progressbar"gt;  lt;div class="progress" id="progress"gt;lt;/divgt;   lt;div class="progress-step progress-step-active" data-title="DEPARTMENT"gt;lt;/divgt;  lt;div class="progress-step" data-title="BLOCK"gt;lt;/divgt;  lt;div class="progress-step" data-title="TITLE"gt;lt;/divgt;  lt;div class="progress-step" data-title="DESCRIPTION"gt;lt;/divgt;  lt;div class="progress-step" data-title="DONE"gt;lt;/divgt;  lt;/divgt;   lt;!-- start Steps 1--gt;  lt;div class="form-step form-step-active"gt;  lt;br/gt;  lt;div class="page-header"gt;  lt;h1gt;First, choose one department that is related to the complaint you are about to make.  lt;span style="color:#ffef96; font-size:15px;"gt;lt;br/gt;  lt;pgt;Click any department for hintlt;/pgt;  lt;/spangt;  lt;/h1gt;  lt;br/gt;   lt;div class="radio-toolbar"gt;  lt;input type="radio" id="radio1" name="cdepartment" class="hint" value="GENERAL" required/gt;  lt;label for="radio1"gt;GENERAL  lt;span class="hintclick"gt; e-Aduan UiTM used for  lt;span style="color:#ffef96"gt;general complaints about UiTM.lt;/spangt;  lt;/spangt;  lt;/labelgt;   lt;input type="radio" id="radio2" name="cdepartment" class="hint" value="FACILITIES"/gt;  lt;label for="radio2"gt;FACILITIES  lt;span class="hintclick"gt;For  lt;span style="color:#ffef96"gt;electrical, mechanical, telecommunications, event management.lt;/spangt;  lt;/spangt;  lt;/labelgt;   lt;input type="radio" id="radio3" name="cdepartment" class="hint" value="ICT"/gt;  lt;label for="radio3"gt;ICT  lt;span class="hintclick"gt;e-Aduan ICT used for  lt;span style="color:#ffef96"gt;ICT complaints lt;/spangt;  lt;/labelgt;  lt;/divgt;   lt;br/gt;  lt;/divgt;lt;!-- page header--gt;   lt;div class="width-50 ml-auto" gt;  lt;a href="#" class="btn btn-next"gt;NEXTlt;/agt;  lt;/divgt;  lt;/divgt;   lt;!-- end Steps 1 --gt;   lt;!-- start Steps 2 --gt;  lt;div class="form-step"gt;  lt;br/gt;  lt;div class="page-header"gt;  lt;h1gt;Second, which block do you wish to complaint about?lt;/h1gt;  lt;br/gt;   lt;div class="radio-toolbar"gt;  lt;div class="grid-container"gt;  lt;?php  $count=4;  $sql="SELECT * FROM `block`";  $result=mysqli_query($connection,$sql);   while($std=mysqli_fetch_array($result))  {  ?gt;  lt;input type="radio" id="lt;?php echo $std['bid'];?gt;" name="cblock" value="lt;?php echo $std['blockname'];?gt;" required/gt;  lt;label for="lt;?php echo $std['bid'];?gt;"gt;lt;?php echo $std['blockname'];?gt;lt;/labelgt;  lt;br/gt;  lt;?php }?gt;  lt;/divgt;  lt;/divgt;   lt;/divgt; lt;!-- page header--gt;   lt;div class="btns-group width-50 ml-auto"gt;  lt;a href="#" class="btn btn-prev"gt;PREVIOUSlt;/agt;  lt;a href="#" class="btn btn-next"gt;NEXTlt;/agt;  lt;/divgt;  lt;/divgt;  lt;!-- end Steps 2 --gt;   lt;!-- start Steps 3 --gt;  lt;div class="form-step"gt;  lt;br/gt;  lt;div class="page-header"gt;  lt;h1gt;Third, pick a title or topic  lt;span style="color:#ffef96; font-size:15px;"gt;lt;br/gt;  lt;pgt;If your related toppic is not listed, please fill in below text box instead.lt;/pgt;  lt;/spangt;  lt;/h1gt;  lt;br/gt;   lt;div class="radio-toolbar"gt;  lt;input type="radio" id="radioApple" name="radioFruit" value="apple" required/gt;  lt;label for="radioApple"gt;Applelt;/labelgt;   lt;input type="radio" id="radioBanana" name="radioFruit" value="banana"/gt;  lt;label for="radioBanana"gt;Bananalt;/labelgt;   lt;input type="radio" id="radioOrange" name="radioFruit" value="orange"/gt;  lt;label for="radioOrange"gt;Orangelt;/labelgt;  lt;/divgt;   lt;div class="input-group"gt;  lt;textarea type="text" class="form-control" row="5" name="cdescription" placeholder="Write here.." required/gt;lt;/textareagt;  lt;/divgt;   lt;br/gt;  lt;/divgt;   lt;div class="btns-group width-50 ml-auto"gt;  lt;a href="#" class="btn btn-prev"gt;PREVIOUSlt;/agt;  lt;a href="#" class="btn btn-next"gt;NEXTlt;/agt;  lt;/divgt;  lt;/divgt;  lt;!-- end Steps 3 --gt;   lt;!-- start Steps 4 --gt;  lt;div class="form-step"gt;  lt;div class="page-header"gt;  lt;h1gt;Lastly, state your description regarding the complaint made  lt;span style="color:#ffef96; font-size:15px;"gt;lt;br/gt;  lt;pgt; Below box you can write any notes about the complaint so the staff can help to understandlt;/pgt;  lt;/spangt;  lt;/h1gt;  lt;br/gt;   lt;div class="input-group"gt;  lt;textarea type="text" class="form-control" row="5" name="cdescription" placeholder="Write here.." required/gt;lt;/textareagt;  lt;/divgt;    lt;/divgt;   lt;div class="btns-group width-50 ml-auto"gt;  lt;a href="#" class="btn btn-prev"gt;PREVIOUSlt;/agt;  lt;button class="btn" type="submit" name="submit"gt;SUBMITlt;/buttongt;  lt;/divgt;  lt;/divgt;  lt;!-- end Steps 4 --gt;   lt;!-- start Steps 5 --gt;  lt;div class="form-step"gt;  lt;div class="page-header"gt;  lt;h1gt;THANK YOU lt;br/gt;  YOU CAN SEE RECENT COMPLAINT ON YOUR HOMEPAGE  lt;/h1gt;  lt;/divgt;  lt;!-- end Steps 5 --gt;  lt;/formgt;  

CSS

 :root {  --primary-color: rgb(165, 121, 64); }  *, *::before, *::after {  box-sizing: border-box; }  .width-50 {  width: 30%; }  .ml-auto {  margin-left: auto; }   /* Progressbar */ .progressbar {  position: relative;  display: flex;  justify-content: space-between;  counter-reset: step;  margin: 2rem 4rem; }  .progressbar::before, .progress {  content: "";  position: absolute;  top: 50%;  transform: translateY(-50%);  height: 4px;  width: 100%;  background-color: #dcdcdc;  z-index: -1; }  .progress {  background-color: var(--primary-color);  width: 0%;  transition: 0.3s; }  .progress-step {  width: 2.1875rem;  height: 2.1875rem;  background-color: #dcdcdc;  border-radius: 50%;  display: flex;  justify-content: center;  align-items: center; }  .progress-step::before {  counter-increment: step;  content: counter(step); }  .progress-step::after {  content: attr(data-title);  position: absolute;  top: calc(100%   0.5rem);  font-size: 0.85rem;  color: #666; }  .progress-step-active {  background-color: var(--primary-color);  color: #f3f3f3; }  /* Form */ .form {  width: 80%;  margin: 30px auto;  border: 1px solid #ccc;  border-radius: 0.35rem;  padding: 1.5rem; box-shadow:  4px 4px 4px 0px #d1d9e6 inset,  -4px -4px 4px 0px #ffffff inset; }  .form-step {  display: none;  transform-origin: top;  animation: animate 0.5s; }  .form-step-active {  display: block; }  .input-group {  margin: 2rem 0; }  @keyframes animate {  from {  transform: scale(1, 0);  opacity: 0;  }  to {  transform: scale(1, 1);  opacity: 1;  } } .row{  height:100%;  width: 50px; } /* Button */ .btns-group {  display: grid;  grid-template-columns: repeat(2, 1fr);  gap: 1.5rem; }  .btn {  padding: 16px;  display: block;  text-decoration: none;  background-color: rgba(0, 0, 0, 0.2);  color: #f3f3f3;  text-align: center;  border-radius: 0.25rem;  cursor: pointer;  transition: 0.3s;  border-radius: 15px 25px;  box-shadow: 5px 8px 10px #888888; } .btn:hover {  box-shadow: 0 0 0 2px #fff, 0 0 0 3px ;  color: #f3f3f3; } /* end progress bar*/  .radio-toolbar {  margin-left: 10px;  text-align: center; }  .radio-toolbar input[type="radio"] {  opacity: 0;  position: fixed;  width: 0; }  .radio-toolbar label {  display: inline-block;  background-color: #f0efef;  padding: 10px;  font-size: 18px;  border: 3px solid #444;  border-radius: 4px;  width: 300px;  height:auto; }  .radio-toolbar label:hover {  background-color: #c2d4dd;  cursor: pointer; }  .radio-toolbar input[type="radio"]:focus   label {  border: 2px dashed #f0efef; }  .radio-toolbar input[type="radio"]:checked   label {  background-color:#a57940;  border-color: #c2d4dd; }  /* end radio button*/  .hint, label .hintclick {  display: none;  opacity: 0; }  .hint:checked  label .hintclick {  display: block;  opacity: 1;  font-size: 17px;  color: white; }  .grid-container {  display: grid;  grid-template-columns: auto auto auto auto auto auto auto auto ; }  .grid-container gt; label {  width: 100%; }  

JS

 const prevBtns = document.querySelectorAll(".btn-prev"); const nextBtns = document.querySelectorAll(".btn-next"); const progress = document.getElementById("progress"); const formSteps = document.querySelectorAll(".form-step"); const progressSteps = document.querySelectorAll(".progress-step");  let formStepsNum = 0;  nextBtns.forEach((btn) =gt; {  btn.addEventListener("click", () =gt; {  formStepsNum  ;  updateFormSteps();  updateProgressbar();  }); });  prevBtns.forEach((btn) =gt; {  btn.addEventListener("click", () =gt; {  formStepsNum--;  updateFormSteps();  updateProgressbar();  }); });  function updateFormSteps() {  formSteps.forEach((formStep) =gt; {  formStep.classList.contains("form-step-active") amp;amp;  formStep.classList.remove("form-step-active");  });   formSteps[formStepsNum].classList.add("form-step-active"); }  function updateProgressbar() {  progressSteps.forEach((progressStep, idx) =gt; {  if (idx lt; formStepsNum   1) {  progressStep.classList.add("progress-step-active");  } else {  progressStep.classList.remove("progress-step-active");  }  });   const progressActive = document.querySelectorAll(".progress-step-active");   progress.style.width =  ((progressActive.length - 1) / (progressSteps.length - 1)) * 100   "%"; }