Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как сделать задержку отправки формы на javascript? (https://javascript.ru/forum/misc/14288-kak-sdelat-zaderzhku-otpravki-formy-na-javascript.html)

Akimserg 10.01.2011 10:04

Как сделать задержку отправки формы на javascript?
 
Добрый день:) . Не работают таймеры:( :

<script type="text/javascript">
function checkForm()
{
              return_value = true;
 
                      if() // какое-то условие
               {
                   return_value = false;
               }
 
               if (return_value==true)  
               {
window.setTimeout(thanks,3000);    // Почему-то форма отправляется сразу, а не ждёт окончания работы таймеров. страница сразу обновляется
window.setTimeout(ishod,13000);
             }  
               
           return return_value;
}
</script>


<form onsubmit="return checkForm()">
...
</form>

Как сделать задержку отправки формы???? Уже второй день бьюсь.

Vulkan 10.01.2011 10:23

Akimserg, setTimeout не останавливает полностью скрипт, просто код после него дальше проходит сразу же, а после пройденного времени уже срабатывает скрипт.

Akimserg 10.01.2011 10:54

ага понятно, это разъясняет ситуацию. Только я всё равно не пойму, как сделать задержку.

Kolyaj 10.01.2011 11:25

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

Akimserg 10.01.2011 13:13

Kolyaj,
Я воспользовался вашим советом:
<form name="forma" action="" method="get" onSubmit="gosend(); return false"> // в событии onSubmit я вызываю функцию и отменяю отправку.
<input class="btn" name="submit" onClick="" value="" type="submit">
</form>


Тепер в функции gosend() хочу отправить форму с задержкой в 2 секнды:
function gosend() {
	
	setTimeout(function(){document.forma.submit();},2000);
	
}

Но ничего не присходит. А вот если посылать без таймера т. е. вот так:
function gosend() {
	
	document.forma.submit();
	
}

то форма отправляется, только, соответственно без задержки. В чём проблема не пойму....

Kolyaj 10.01.2011 13:20

Потому что при вызове метода submit срабатывает событие submit, которое вы отменяете. Выставляйте где-нибудь флаг, чтобы в обработчике знать, отменять событие или нет.

Akimserg 10.01.2011 13:47

решил проблему так:
<form id="myForm" name="forma" action="" method="get" onSubmit=""> //обработчиком onSubmit не стал пользоваться 
....
<input class="btn"  onClick="checkForm()" value="" type="button"> //Вызвал функцию через onClick
</form>


А в функции:
function checkForm()
{


setTimeout('document.forma.submit()',6000); //задерка

}

Спасибо за внимание))))

Kolyaj 10.01.2011 13:58

Форму можно отправить не только кликом по кнопке, так что плохой вариант.

Akimserg 10.01.2011 15:06

Не понял. Что плохого в этом варианте?

Amphiluke 10.01.2011 15:45

Цитата:

Сообщение от Akimserg
<input class="btn" name="submit" onClick="" value="" type="submit">

Akimserg, никогда не именуйте элементы формы именем типа "submit", поскольку это имя совпадает с названием метода submit() формы. Когда вы попытаетесь вызвать метод submit(), вам в консоль вывалится ошибка о том, что submit — это не функция (а имя элемента формы). И соответственно, ничего не будет работать, как сейчас.


Часовой пояс GMT +3, время: 18:58.