Отмена подтверждения () все еще отправляется - PullRequest
0 голосов
/ 07 мая 2020

Отмена подтверждения () не препятствует отправке. Даже если я нажму «Отмена», он все равно отправится. Как я могу отменить заявку?

<form>
  <div class="actions d-flex justify-content-center">
    <button class="btn btn-success" onclick="return warning(this.form)">Submit</button>
  </div>
</form>

<script type="text/javascript">
  function warning(form) {
    if (window.focus) self.focus();
    var tmp = 100;

    for (i = 0; i < tmp; i++) {
      var sel = document.getElementById("student_answer_role" + (i + 1));
      var val = sel.options[sel.selectedIndex].value;
      if (val == "") {
        return confirm("You didn't answer all questions.");

      }
    }
  }
</script>

1 Ответ

0 голосов
/ 07 мая 2020

Ваш код не сработает, если вопросов меньше 100 и на все вопросы даны ответы. Если у вас есть только до student_answer_role10, то тестирование student_answer_role11 вызовет ошибку, которая приведет к выходу из кода проверки и вызовет отправку формы

Вот лучший способ

window.addEventListener("load", function() {
  document.getElementById("studentForm").addEventListener("submit", function(e) {
    let text = [];
    [...document.querySelectorAll("select[id^=student_answer_role]")].forEach((sel, i) => {
      const val = sel.options[sel.selectedIndex].value;
      if (val == "") {
        text.push("You didn't answer question #" + (i + 1)); // can be used for ANY error
      }  
    })
    if (text.length > 0) {
      if (!confirm(text.join("\n") + "\nContinue?")) {
        e.preventDefault(); // stop submission
      }  
    }
  })
})
<form id="studentForm">
  <select id="student_answer_role1">
    <option value="">Please select</option>
    <option value="1">One</option>
  </select>
  <select id="student_answer_role2">
    <option value="">Please select</option>
    <option value="2">Two</option>
  </select>
  <div class="actions d-flex justify-content-center">
    <button class="btn btn-success">Submit</button>
  </div>
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...