JavaScript - обнаружить нажатие кнопки остановки браузера - PullRequest
3 голосов
/ 18 марта 2011

У меня есть форма, которая отключает кнопку отправки, когда она нажата. Но что делать, если пользователь нажимает кнопку «Стоп» браузера? Тогда он не сможет повторно отправить форму.

Есть ли способ обработки таких случаев, возможно, обнаружение нажатия кнопки Стоп?

Ответы [ 3 ]

2 голосов
/ 18 марта 2011

В чем причина отключения кнопки отправки?

Вы пытаетесь избежать двойного щелчка? -> Вы можете отключить кнопку отправки только на короткий промежуток времени, снова включив ее по истечении времени ожидания.

Вы пытаетесь избежать нетерпеливых повторных нажатий? -> то же самое, но с более длительным периодом бездействия.

Вы пытаетесь остановить отправку формы дважды, что вызывает повторяющиеся действия? -> Вы не можете бороться с этим просто отключив кнопку, так как переход назад / вперед приведет к перезагрузке страницы, вероятно, сохраняя старое содержимое формы, но не состояние отключенного состояния, если только bfcache не закорочен. В этом случае необходимо создать токен одноразового использования или новый идентификатор элемента, который нельзя использовать более одного раза, и поместить его в скрытое поле формы. Сервер может проверить это и запретить дубликаты.

возможно обнаружение нажатия кнопки Стоп?

Избегайте onstop, это не совсем надежно. Помимо проблем поддержки браузера, он не может поймать все возможные комбинации навигации и остановки / перезагрузки / и т.д. Вы никогда не узнаете, как далеко зашел серверный скрипт, выполнил ли он какое-либо действие.

1 голос
/ 18 марта 2011

Лучше всего было бы обнаружить кнопку отправки на сервере , поэтому ее можно отправить только один раз.Таким образом, независимо от того, что происходит (firebug и т. Д.), Форма отправляется только один раз.Событие OnStop() есть, но это только IE, и я бы не рекомендовал его использовать.

0 голосов
/ 18 марта 2011
document.onstop

Вы можете найти документацию для этого здесь:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...