Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как исключить повторное нажатие кнопки "Submit"?
Форумы портала PHP.SU » » Вопросы новичков » Как исключить повторное нажатие кнопки "Submit"?

Страниц (1): [1]
 

1. Hawkmoth - 26 Марта, 2012 - 22:14:58 - перейти к сообщению
Господа гуру, помогите пожалуйста вот с такой проблемой. Есть форма регистрации с Submit'ом внизу. После нажатия на сабмит данные через аякс улетают на сервер, где обрабатываются скриптом и, если были найдены ошибки - пользователю изящно сообщается об этом через тот же аякс. Если ошибок нет - скрипт выполняется до конца, включая отправку e-maila и редирект на страницу с подтверждением. Проблема в том, что в случае успешного выполнения браузер думает где-то секунд 5-6, а за это время нетерпеливый пользователь умудряется n раз нажать на кнопку с подтверждением, что приводит к понятным вещам. Как запретить пользователю больше одного раза нажимать на 'submit', но при этом чтобы в случае найденных ошибок сабмит становился активным вновь?
2. LIME - 26 Марта, 2012 - 22:22:23 - перейти к сообщению
если уж такой медленый обработчик то можно по нажатию до отправки запроса делать кнопку дисаблед
и потом снова разрешать по приходу ответа
подумайте над тем что вместо аjax использовать перезагрузку
если медленый обработчик нафига такой ajax )))
3. Hawkmoth - 26 Марта, 2012 - 22:30:15 - перейти к сообщению
Дело в том, что аякс отлично работает в плане предупреждения ошибок - включая проверки на наличие недопустимых символов, совпадение с уже имеющимися в базе логинами и е-майлами и т.п. Пользователю мгновенно выводится соответствующее сообщение.
Но вот если ошибок нет, возникает задержка. И хотелось бы, чтобы во время этой задержки пользователь не мог лишний раз кликнуть на сабмит.
Логика такая - после клика на сабмит кнопка 'disabled', скрипт обработал, и если вернул 'ошибку', снова 'enabled'.
4. LIME - 26 Марта, 2012 - 22:44:07 - перейти к сообщению
jquery?
5. Hawkmoth - 26 Марта, 2012 - 22:53:06 - перейти к сообщению
LIME пишет:
jquery?


Ага.

В общем, сделал тривиально, но как раз то, что хотел:
После нажатия на сабмит в js-функции отправки данных на сервер написал
CODE (javascript):
скопировать код в буфер обмена
  1. document.getElementById('submit').disabled=true;

а в функции принятия ошибок от сервера, соответственно:
CODE (javascript):
скопировать код в буфер обмена
  1. document.getElementById('submit').disabled=false;


Всё работает как надо.
6. LIME - 26 Марта, 2012 - 22:59:07 - перейти к сообщению
только если юзер не држдется и обновит страницу или ссылу жмакнет
логика не сломается?
ajax должен быть быстрым
подумайте
вероятно плохо обработчик написан?
может бд оптимизировать?
может в случае отсутсвия ошибки всю страницу отправить на на типа "идет обработка" с рефрешем 5 сек?
хз что но чтото надо делать
7. Hawkmoth - 26 Марта, 2012 - 23:13:09 - перейти к сообщению
Подозреваю, что все беды из-за sendmail.
Там, где нужно отправить письмо со ссылкой активации - скрипт думает.

Но это 5-6 секунд, не больше.
LIME пишет:
может в случае отсутсвия ошибки всю страницу отправить на на типа "идет обработка" с рефрешем 5 сек?
хз что но чтото надо делать

Прикрутил крутящийся "бегунок", типа "обработка идёт".
Думаете, все равно будут жмакать?)
8. LIME - 26 Марта, 2012 - 23:32:57 - перейти к сообщению
Hawkmoth пишет:
Там, где нужно отправить письмо со ссылкой активации - скрипт думает.
вставте отладку
вывод времени в секундах после каждого действия
найдете узкое место
9. snikers987 - 27 Марта, 2012 - 08:52:17 - перейти к сообщению
Hawkmoth
jQuery
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $("#submit").attr("disabled", "disabled");
  3. $("#submit").removeAttr("disabled");
  4.  

 

Powered by ExBB FM 1.0 RC1