@MelPosp

Как сделать задержку на button на переход по ссылке?

Есть код формы:
<button type="submit" onclick="document.getElementById('link').click()" data-target="_blank">Скачать</button> 
<a id="link" target="_blank" href="/sostavy_betonov_sut.doc" download hidden></a>


При клике на кнопку происходит отправка формы и переход по ссылке. Только вот форма не успевает отправится, сразу происходит переход по ссылке. Как сделать задержку в переходе по ссылке на 2-3 секунды? что бы форма успела отправится
  • Вопрос задан
  • 232 просмотра
Пригласить эксперта
Ответы на вопрос 4
mannaro
@mannaro Куратор тега JavaScript
Умею профессионально гуглить
Никогда не делайте задержку "в 2-3 секунды, авось успеет". Точно не успеет когда-нибудь. Надо всегда полагаться только на железные факты. Я бы предложил сделать отправку формы аяксом, ловить получение ответа от сервера и после этого уже редиректить пользователя.
Ответ написан
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
Отправка формы это ж не что-то в фоне. Это точно такой же переход по ссылке, только с дополнительными данными. А вы перенаправляете браузер с одной ссылки на другую.
Так что тут два варианта:

  1. Вместе с формой отправляете ссылку redirect_to. Например в скрытом поле
    <input type="hidden" name="redirect_to" value="/sostavy_betonov_sut.doc">
    . Когда обработчик закончит работу - он выполнит редирект по указаному путии
  2. Отправляйте не саму форму, а собирайте данные с неё и отправляйте на сервер ajax-ом. Когда сервер ответит, что данные приняты и обработыны — запустите callback, в вашем случае переход по указанной ссылке
Ответ написан
mmmaaak
@mmmaaak
const fd = new FormData();
fd.append(...);
fetch(url, { method: 'POST', body: fd }).then(() => { /* redirect here */ })
Ответ написан
Robur
@Robur
Знаю больше чем это необходимо
у вас при отправке вызывается funMZZrU();
Вы можете переопределить эту функцию - самый простой способ просто скопипастить код из старой функции в новую и добавить туда строчку с нужным действием после того как запрос отработает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы