Перенаправление после отправки со счетчиком

Я пытаюсь перенаправить счетчик на другую страницу. Я хочу, чтобы перенаправление началось, когда я отправлю форму. Я хочу перенаправить на другую страницу после отправки формы.

var count = 6;
var redirect = "https://www.google.com";

function countDown() {
  var timer = document.getElementById("timer");
  if (count > 0) {
    count--;
    timer.innerHTML = "This page will redirect in " + count + " seconds.";
    setTimeout("countDown()", 1000);
  } else {
    window.location.href = redirect;
  }
}
<form method = "post">
  <p>
    <label>Name
      <input type = "text" name = "textfield">
    </label>
  </p>
  <p>
    <input type = "submit" name = "Submit" value = "Submit"><br>
</form>

<span id = "timer">
  <script type = "text/javascript">countDown();</script>
</span>

</p>

Непонятно, что вы пытаетесь сделать. Если вы хотите отправить, когда форма отправлена, в чем смысл (сломанного) счетчика?

Rory McCrossan 15.05.2019 14:27

я хочу, чтобы перенаправление отображалось после отправки формы. например, если я ввожу имя, затем нажимаю «Отправить», затем происходит перенаправление. вместо перенаправления, когда вы не заполнили и не отправили форму

jeff tio 15.05.2019 14:34

Извините, это не имеет особого смысла.

Rory McCrossan 15.05.2019 14:35

Как отправляется ваша форма?

Maelig 15.05.2019 14:44
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
239
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете получить счетчик, используя setInterval и выполняя проверку до тех пор, пока он не достигнет 0 для перенаправления:

<form method = "post">
  <p>
    <label>Name
  <input type = "text" name = "textfield">
  </label>
  </p>
  <p>
    <input type = "submit" name = "Submit" value = "Submit">
    <br>
</form>

<span id = "timer">This page will redirect in <span id = "count"></span> second(s).</span>
<script type = "text/javascript">
  var count = 6;
  var redirect = "https://www.google.com";
  var elem = document.getElementById('count');
  elem.innerText = count
  
  setInterval(() => {
    count--
    elem.innerText = count
    if (count == 0) {
      window.location.href = redirect;
    }
  }, 1000)
</script>

это то же самое. я хочу, чтобы перенаправление отображалось после отправки формы. например, если я ввожу имя, нажмите «Отправить», затем приходит перенаправление. вместо перенаправления, когда вы не заполнили и не отправили форму

jeff tio 15.05.2019 14:35

Отправка формы вызовет запрос на ваш сервер, поэтому вы не сможете вызвать перенаправление после отправки формы.

Kobe 15.05.2019 14:37

я понимаю. Ok

jeff tio 15.05.2019 14:53
Ответ принят как подходящий

Отправка формы всегда является запросом к серверу. Вы можете либо использовать ajax для отправки формы, либо вы можете просто подсчитать и отправить форму позже.

Чтобы ваша форма не отправлялась, когда пользователь нажимает кнопку, вы можете предотвратить поведение по умолчанию следующим образом:

$('input [type=submit]').on('click', function( event ) {
    event.preventDefault();
    // use your counter here
    // when counter hits 0 just submit the form with
    $('form').submit();
});

или используйте вызов ajax:

$('form').on('submit', function(event) {
    event.preventDefault();
    $.ajax({
        url: 'url/to/form/action',
        data: $(this).serialize(),
        method: "POST",
        success: function() {
            // start your counter
            // REDIRECT
        }
    });
});

Проблема с первым методом заключается в том, что вы просто задерживаете отправку формы. Во втором случае вы не можете достоверно сказать, когда вы получите успешный (или ошибочный) ответ, поскольку вызов асинхронный. Это приведет либо к задержке перед запуском вашего счетчика, либо к возможной задержке после окончания вашего счетчика, если сервер не ответил до этого момента.

Другие вопросы по теме