Почему FORM с одним текстовым INPUT submit на входе, когда один с двумя текстовыми входами не работает?
Я только что узнал, что FORM, содержащий только один INPUT (не скрытый), будет автоматически отправляться при нажатии Enter.
Но форма, содержащая по крайней мере два INPUTS (не скрытых), не будет отправляться при нажатии enter.
(Ни один из скриптов не имеет кнопку submit/button/input [type = submit] внутри)
Взгляните на jsfidle. Есть ли объяснение/стандарт для этого поведения?
<form id="form1" method="POST">
<p>Does submit:</p>
<input type="text" placeholder="focus and press enter"/>
</form>
<form id="form2" method="POST">
<p>Does <strong>not</strong> submit:</p>
<input type="text" placeholder="does not submit"/>
<input type="text" placeholder=""/>
</form>
Ответы
Ответ 1
Это поведение было введено в спецификации HTML 2.0. Более подробную информацию см. В следующей статье:
Подача формы и клавиша ENTER?
Если в форме есть только однострочное текстовое поле ввода, пользовательский агент должен принять Enter в этом поле в качестве запроса на отправку форма
Источник: Характеристики W3C
Ответ 2
Это конкретная реализация браузера., некоторые версии IE фактически не делают этого по умолчанию, но Firefox и некоторые другие браузеры считают целесообразным сделать предположение, что для формы с одним текстовым полем пользователь (или разработчик страниц) всегда хочет, чтобы форма отправлялась на Enter
из этого поля.
На самом деле было несколько раз, что мне пришлось кодировать вокруг этого., это один из наиболее сомнительных решений для дизайна браузера, на мой взгляд.
Edit:
Есть более тонкие ответы на ваш вопрос, если вы заинтересованы., по-видимому, разные браузеры (и их разные версии) имеют разные типы поведения вокруг этой конкретной ситуации, в том числе независимо от того, отправляются ли они вообще, происходит ли событие click
и т.д. Я могу предоставить ссылки на дополнительную информацию, если вы хотите читайте больше.
Но короткий ответ заключается в том, что он на самом деле преднамерен, если не поддерживается последовательно в браузерах.
Ответ 3
Добавьте в IE следующее:
$(document).ready(function() {
$('input,select').keypress(function(event) { return event.keyCode != 13; });
});