Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Конфликт onchange и onsubmit (https://javascript.ru/forum/events/49823-konflikt-onchange-i-onsubmit.html)

leksus 29.08.2014 21:21

Конфликт onchange и onsubmit
 
Приветствую!

Есть форма, где при вводе некоторых данных происходит событие onchange, после чего форма через XMLHttpRequest отправляется на сервер, там данные проверяются и сохраняются в сессии (чтобы в случае случайного закрытия или обновления странички введенные данные не потерлись в форме). Также есть кнопка submit, при нажатии на которую происходит событие onclick и опять через XMLHttpRequest на сервере происходит окончательная проверка данных, они записываются в БД и происходит их дальнейшая обработка.

Проблема в том, что если заполнить форму и затем жмакнуть на submit без снятия фокуса на последнем заполненном (отредактированном) поле, то произойдет событие onchange, а не onclick. В случае, если поле отредактировать, затем фокус с поля сбросить (кликнув в любом другом месте), то onclick отрабатывает так, как мне надо. Собственно, поведение понятно, но я не знаю, как сделать, чтобы после onchange сразу срабатывал onclick. Есть подозрение, что я хочу чего-то неправильного :)

JS знаю на уровне копи-паста кода, событий и простейших конструкций.

UPD: тему неправильно написал, не onsubmit, a onclick.

Rise 30.08.2014 03:05

leksus, alert убери и будет всё ok.

leksus 30.08.2014 13:38

Эмм, какой алерт? У меня он не используется.

Порылся на вашем форуме, нашел ответ:
http://javascript.ru/forum/dom-windo...vke-formy.html

Вкратце - заменить на кнопке onclick на onmousedown. Всем спасибо, все свободны :)

kostyanet 02.09.2014 12:05

Цитата:

поле, то произойдет событие onchange, а не onclick.
Сначала произойдет change, затем произойдет click. Если посмотреть фазы то увидите сперва 2, потом 3.

Так что проверяйте свои коды, куда там утикает click, без которого никакого change быть не может.


ЗЫ

Цитата:

onmousedown - выполняется первее, чем onchange.
Это понятно, но click заканчивается после change. Следовательно у вас сперва пойдут данные с поля на сервер, типа проверятся, затем пойдет уже вся форма, поскольку когда юзер нажал на копку, с поля ушел фокус, ончендж сгорел, а затем догорел щелчок.


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