Почему делает формы с единственным полем ввода, отправляют после нажатия клавиши Enter во входе

У меня были те же самые проблемы.

я удалил строку

/usr/lib/gio/modules libglib2.0-0

от /var/lib/dpkg/triggers/File

будучи немного новичком, я не уверен, что это была хорошая идея или нет, но это, по крайней мере, удалило ошибку, таким образом, я мог продолжить.

74
задан T J 16 December 2015 в 11:05
поделиться

6 ответов

Это малоизвестная «Причуда», которая давно отсутствовала. Я знаю, что некоторые люди решали это разными способами.

Самый простой обходной путь, на мой взгляд, - просто иметь второй ввод, который не отображается пользователю. Разумеется, не все, что удобно для пользователя на бэкэнде, оно действительно помогает решить проблему.

Я должен отметить, что чаще всего я слышу об этой проблеме конкретно с IE, а не с FireFox или другими. Хотя, похоже, это влияет и на них.

50
ответ дан 24 November 2019 в 12:00
поделиться

Это известная ошибка в IE6 / 7/8 . Не похоже, что вы получите исправление.

Лучший обходной путь, который вы можете сделать для этого, - добавить еще одно скрытое поле (если ваша инженерная совесть позволяет). IE больше не будет автоматически отправлять форму, когда обнаружит, что в форме есть два поля типа ввода.

Обновление

Если вам интересно, почему это так, этот драгоценный камень появляется прямо из Спецификация HTML 2.0 (раздел 8.2) : ​​

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

49
ответ дан 24 November 2019 в 12:00
поделиться

Нажатие Enter работает по-разному в зависимости от (а) количества полей и (б) количества кнопок отправки. Он может ничего не делать, он может отправить форму без «успешной» кнопки отправки, или он может притвориться, что была нажата первая кнопка отправки (даже генерируя для нее onclick!), И отправить со значением этой кнопки.

Например, если вы добавите input type = "submit" в вашу форму с двумя полями, вы заметите, что он тоже отправляет.

Это древняя странность браузера, восходящая, по крайней мере, к раннему Netscape ( может быть и дальше), который сейчас вряд ли будет изменен.

Недействителен без «действия». Если вы не собираетесь никуда отправлять и вам не нужна группировка имен радиокнопок, вы можете просто полностью опустить элемент формы.

7
ответ дан 24 November 2019 в 12:00
поделиться

Он не перезагружает страницу как таковую, а отправляет форму.

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

Кроме того, я не могу воспроизвести поведение, которое вы описываете. Если я ввожу какой-либо текст в форме и нажимаю Enter, он отправляет форму, независимо от того, где в форме находится ввод или сколько там вводов.

Возможно, вы захотите попробовать это еще в другом браузеры.

3
ответ дан 24 November 2019 в 12:00
поделиться

Спасибо всем, кто ответил. Открывает глаза то, что форма с одним полем действует иначе, чем форма со многими полями.

Другой способ справиться с этой автоматической отправкой - это кодировать функцию отправки, которая возвращает false.

В моем случае у меня была кнопка с событием onclick, поэтому я переместил вызов функции с добавленным ключевым словом return в событие onsubmit. Если вызываемая функция возвращает false, отправка не произойдет.

<form onsubmit="return ajaxMagic()">
<input type="text" name="partid" id="partid"  />
<input type="submit" value="Find Part" />
</form

function ajaxMagic() {
  ...
  return (false);
}
1
ответ дан 24 November 2019 в 12:00
поделиться

Вот код, который я использовал для решения проблемы:

<form>
<input type="text" name="partid" id="partid"  />
<input type="text" name="StackOverflow1370021" value="Fix IE bug" style="{display:none}" />
</form>
7
ответ дан 24 November 2019 в 12:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: