Страница неожиданно перезагружается, что приводит к исчезновению данных формы - PullRequest
0 голосов
/ 18 сентября 2019

(Примечание. Этот вопрос предназначен для использования в качестве дублирующего целевого объекта и канонического ответа на все вопросы, если действие по отправке формы не предотвращается и приводит к перезагрузке страницы и потере входных данных).

  1. У меня есть HTML-форма, и когда я нажимаю кнопку отправки, страница мигает, и все поля формы сбрасываются.

ИЛИ

У меня есть форма на основе AJAX, и когда я нажимаю кнопку отправки, страница мигает, все поля формы сбрасываются, и мой ответ AJAX никогда не происходит.

ИЛИ

У меня есть HTML-форма без кнопки <input type="submit" />, но с простым элементом <button>, и когда я нажимаю на нее, страница мигает, и все поля формы сбрасываются.

ИЛИ

Моя форма состоит из одного текстового поля, и когда я фокусируюсь на нем и нажимаю клавишу ввода, страница мигает и все поля формы сбрасываются.

1 Ответ

1 голос
/ 18 сентября 2019

Проблема?

Вы не препятствуете отправке формы, и браузер перезагружает страницу, стирая все введенные данные.

Случай 1

Базовая форма HTML содержит атрибут метода (обычно post или get) и атрибут действия (обычно имя файла скрипта для обработки формы).Если оно опущено или оставлено пустым, например, <form action="" method="get"> или <form method="post">, форма отправит содержимое обратно на ту же страницу и включит его.Такое поведение может быть желательным, так как оно обычно называется обратной передачей, однако для этого требуется, чтобы страница загружалась каждый раз при загрузке.Если вы не хотите обрабатывать форму на той же странице, на которой она существует, обязательно укажите страницу обработки в атрибуте действия или не отправляйте форму одним из следующих способов.

Случай 2

Вы создаете внутристраничное приложение, которое использует форму, например калькулятор, и вам не нужно отправлять форму, но всякий раз, когда вы нажимаете определенную кнопку,страница мигает, и вы не получите ожидаемого результата.

99% времени это происходит потому, что форма отправляется, когда вам нужно предотвратить событие отправки.Наиболее распространенными решениями этой проблемы являются возврат false из вашей функции обработки (return false) или предотвращение поведения по умолчанию для события submit (event.preventDefault).

Case 3

У вас есть форма без кнопки отправки, например, <input type="submit" /> или <button>Click here</button> в вашей форме, но она отправляется при нажатии кнопки.Здесь наиболее вероятный виновник - элемент <button>.Тип элемента кнопки по умолчанию - submit, и без указания другого типа, например <button type="button">, нажатие на элемент кнопки немедленно отправит вашу форму.

Случай 4

Нажатие на элемент в вашей форме, например, ссылка, кнопка, может вызвать другие события щелчка, связанные с вашей формой, далее по иерархии DOM.Если ваша форма прослушивает события более высокого уровня, чем элемент, по которому вы щелкаете, событие click будет всплывать в DOM, вызывая любые другие события щелчка.Этого можно избежать, используя stopPropagation() метод события .

Случай 5

Некоторые браузеры имеют странное поведение , котороедовольно старый , где форма с одним текстовым полем будет отправлена ​​при нажатии клавиши ввода, когда она находится в фокусе.Это основано на очень старой спецификации , которая гласит:

Когда в форме только одно однострочное поле ввода текста, пользовательский агент должен принять Enter в этом полекак запрос на отправку формы.

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