Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как сделать disabled кнопки во время отправки формы? (https://javascript.ru/forum/events/1889-kak-sdelat-disabled-knopki-vo-vremya-otpravki-formy.html)

Bad Request 01.10.2008 12:51

Как сделать disabled кнопки во время отправки формы?
 
Здравствуйте!
Есть форма для отправки сообщения:
<form onsubmit="zapret()">
<textarea cols="30" rows="5"></textarea>
<br/>
<input id="ds" type="submit"/>
</form>

Хочется сделать кнопку submit неактивной во время отправки. Чтобы, в случае задержки отправки, ее не нажимали несколько раз. Пробовал так:
function zapret()
{
   var btn = document.getElementById('ds').disabled = true;
}

Так не работает. В чем моя ошибка? И можно ли сделать, чтобы вообще все элементы формы становились во время отправки неактивными?

Octane 01.10.2008 13:19

В функции zapret поставьте return false;
Данные формы можно отправить не только нажатием кнопки submit, но и нажатием Enter, если в одном из полей ввода установлен фокус, потому надо отключать событие onsubmit формы или кнопки submit, без разницы.

Bad Request 01.10.2008 13:57

return false не помогает.
Обычные пользователи без мышки ничего не нажимают и не отправляют. Как раз из-за них мне и нужно запретить повторное нажатие кнопки. Чтобы ее не тыркали несколько раз подряд.

Bad Request 01.10.2008 15:45

Я разобрался, все фурычит!

alt5000 27.10.2008 11:36

Ну и как Вы это реализовали? В чем была ошибка?

Bad Request 31.10.2008 16:45

Да так, как написано все и работает. Просто нужно было поставить какое-нибудь значение action у формы, чтобы отправка данных занимала какое-то время. А так все происходило слишком быстро и я не успевал заменить, что скрипт пашет :)

onfreedom 14.04.2014 14:14

У меня вот тоже небольшая проблема с данным скриптом. Скрипт работает но при этом не происходит проверки полей форм. поскольку новичок в этом деле не совсем могу понять как правильно объединить, заставить работать 2 скрипта.
<script language="javascript">
function sendform() 
{
if (document.form.form1.value == "") {
alert('Вы не ввели фамилию');
return false;
}
if (document.form.form2.value == "") {
alert('Вы не описали проблему');
return false;
}
return true;
}
</script>

и
<script language="javascript">
function zapret()
{
var btn = document.getElementById('ds').disabled = true;
}
</script>


на одно событие (форму) ?

<form action="work.php" method="POST" name='form' onsubmit="zapret()" onsubmit="return sendform();">
<input type="text" method="post" name="form1">
<input type="text" method="post" name="form2">
<input type="submit" name="submit" value="ok" id="ds">


Пробовал так - но увы (((
<script language="javascript">
function sendform() 
{
if (document.form.form1.value == "") {
alert('Вы не ввели фамилию');
return false;
}
if (document.form.form2.value == "") {
alert('Вы не описали проблему');
return false;
}
return true;
}
{
var btn = document.getElementById('ds').disabled = true;
}
</script>

<form action="work.php" method="POST" name='form' onsubmit="return sendform();">

Ilya_Nsk 16.04.2014 13:49

Ребят, вы что? Валидация формы на стороне клиента совсем не айс! Если уж на то пошлО, это можно взвалить на плечи броузера - HTML5 позволяет, почитайте про дополнительные свойства типа required, size etc у input'ов.
на jQuery есть готовые валидаторы форм, с кастомными правилами проверки форматов. Что бы перехватить отправку, action оставьте пустым, по onsubmit="check_form();return false;". Здесь check_form - обработчик формы, в нем Ваш обработчик и должен быть ajax-запрос с вызовом Вашего work.php типа
response=$.ajax({url: 'work.php', dataType: 'text', async: false}).responseText;
, в response Ваш work поместит свой ответ, например success, если все ОК или сообщение об ошибке. Спокойно парсите response, страничка не перегружается... про sql-инъекции не забудьте, точнее про защиту от них.


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