OnBlur вызывает нажатие кнопки «Отправить» дважды

У меня есть форма, которая выполняет проверку js на стороне клиента через ajax. Это простая форма для отправки электронной почты (контакт) с 3 полями: имя, адрес электронной почты и сообщение. Если вы попытаетесь нажать кнопку «Отправить» без надлежащей проверки, станут видны блоки сообщений об ошибках. Каждый из этих трех входов вызывает js-функции через onblur. Если я попытаюсь ввести правильный ввод, а затем щелкнуть «Отправить» один раз, это не сработает. Щелкните второй раз, и он работает.

Причина, по которой мне нужно расфокусировать это поле, чтобы функция проверки onblur обрабатывала ТОГДА, когда она отправляла. Похоже, это обычная проблема. Submit вызывает php-скрипт, который выполняет ajax-вызов для проверки трех полей и, если он верен, отправляет электронное письмо с отображением сообщения "Success".

Любая идея, как мне остановить этот двойной щелчок по кнопке отправки ??

Я не предоставил код, потому что предполагаю, что он будет слишком длинным, но для справки ... 3 поля возвращают false, если плохо, и true, если хорошо, тогда скрипт php просто проверяет 2 поля, если они пусты, и поле электронной почты если он правильно отформатирован с помощью регулярного выражения. Затем, если это так, использует почтовую функцию и затем печатает «успех» в div.


person Shaun McCready    schedule 02.08.2013    source источник
comment
почему бы не выполнить проверку на стороне клиента на самом submit, ЕСЛИ вы хотите отображать сообщения об ошибках (из проверки на стороне клиента), пока пользователь вводит данные в живом виде, это лучше быть в onchange, а не в onblur   -  person    schedule 02.08.2013
comment
Понятия не имею, потому что у меня нет кода. Кстати, Добро пожаловать в SO. Вы заметите, что среди сотен тысяч вопросов здесь большинство публикует свой код. Без этого и щепотки соли мы не сможем приготовить хорошую буханку хлеба, которая могла бы спасти наши жизни, хорошо, моя. О, и Прочтите это в первую очередь, если вы еще этого не сделали, это хорошее прочтение!   -  person Funk Forty Niner    schedule 02.08.2013
comment
Спасибо за ответы и материалы для чтения. Обычно я публиковал код, однако предполагал, что было бы слишком просто показывать теги ввода, вызывающие функции внутри очень простой формы, и onblur, возвращающий логические значения. Я собираюсь попробовать пару идей, которые у меня только что появились ...   -  person Shaun McCready    schedule 02.08.2013


Ответы (3)


Я думаю, у вас нет альтернативы, кроме (при нажатии кнопки отправки), флаг, который был нажат, а затем в обратных вызовах валидатора, если все верно, проверьте флаг, если он установлен, затем отправьте форму.

document.formname.submit();
person Jim W says reinstate Monica    schedule 02.08.2013

Я просто решил проблему. Onblur определенно был проблемой. Я изменил onblur на onkeyup таким образом, что после каждого нажатия клавиши он все повторно проверяет, поэтому, как только я пытаюсь нажать «Отправить», он уже проверил входную сторону клиента и немедленно запускает скрипт на стороне сервера.
Спасибо за все вводят каждый.

person Shaun McCready    schedule 02.08.2013
comment
Что делать, если сетевое соединение слишком медленное? Я не думаю, что ваше решение так же надежно, как мое. - person Jim W says reinstate Monica; 03.08.2013

вы можете использовать

$(document).ajaxComplete(function(){
                form.submit();     
                });

Который будет ждать завершения любого запроса ajax.

person Sandeep J Patel    schedule 16.11.2013