Xpoint
   [напомнить пароль]

Отправка формы по Enter

Метки: [без меток]
2008-03-05 18:29:47 [обр] Kleo[досье]

Есть вот такой простой код, который не работает в ИЕ (пытаемся отправить форму по enter):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
   <title>Display: none</title>
</head>
<body> 

<form action="#" onsubmit="alert('enter'); return false">
   Название1: <input name="text_1" />
   Название2: <input name="text_2" />
   <input type="button" value="ОК" onClick="alert('ok')">
   <input type="submit" style="display: none">
</form>

</body>

Если убрать второе поле, то работает:

...
<form action="#" onsubmit="alert('enter'); return false">
   Название1: <input name="text_1" />

   <input type="button" value="ОК" onClick="alert('ok')">
   <input type="submit" style="display: none">
</form>
...

Если убрать у submit`а "display: none" тоже работает:

...
<form action="#" onsubmit="alert('enter'); return false">
   Название1: <input name="text_1" />
   Название2: <input name="text_2" />
   <input type="button" value="ОК" onClick="alert('ok')">
   <input type="submit">
</form>
...

В чем трабл, кто может подсказать?

спустя 3 часа 18 минут [обр] Алексей В. Иванов(95/2861)[досье]
Используйте onclick на <input type=submit>
спустя 4 часа 58 минут [обр] Kleo[досье]
Логично и вполне очевидно :-). Но интересно было бы узнать не способ, как можно заставить код работать, а причину по которой он в предложенном выше виде не работоспособен.
Все же спасибо за ответ и проявленное внимание.
спустя 7 часов [обр] Thirteensmay(3/157)[досье]

Kleo[досье] Форма отправляется не по enter а по нажатию на кнопку submit. Отправка по enter может произойти в 2 случаях:
1 - когда кнопка submit находится в фокусе, вы жмете enter, соответственно нажимается submit.
2 - когда вы находитесь в единственном элементе ввода в форме, очевидно что если элемент один то по интеру можно отправить всю форму не опасаясь того что остальные элементы к этому моменту еще не заполнены, если элементов в форме несколько то такое не соблюдается.

Поэтому когда вы оставляете в форме только одно поле, или таки показываете кнопку submit у вас становится возможна отправка по enter. Фокус на submit в вашем случае устанавливается автоматически т.к. он единственный в форме, и даже если бы был не единственный, то последний. Фокусы вы можете устанавливать принудительно, т.ч. можно управлять этим поведением.

Насколько я знаю эта область функционирования стандартами не описывается.

спустя 4 часа 22 минуты [обр] Kleo[досье]
Thirteensmay[досье] благодарю за подробный ответ. Перерыл по теме всю гуглу, но так и не смог найти внятного объяснения. Теперь же все встало на свои места.
спустя 2 часа 17 минут [обр] Евгений Петров(76/1055)[досье]

Kleo[досье]
Все дело в скрытии (display:none) кнопки с type="submit". Количество полей тут не причем.
Пример с одним полем тоже работать не будет (у меня, во всяком случае, так и не получилось).

Thirteensmay[досье]
Предположение красивое и, вроде бы, логичное, но, к сожалению, не подтвержающееся практикой. Эксперимент с любым количеством полей покажет одинаковый результат при нажатии на Enter, если есть input type="submit" и, это важно, она не скрыта.
Вот тут:

the "tab" key is used for navigation and the "enter" key is used to activate a selected element

Почему при нажатию на Enter происходит передача на первый из контролов с type="submit", не смог найти. Но практика - упорная штука и показывает именно такой результат.

спустя 1 час 45 минут [обр] Thirteensmay(3/157)[досье]

Евгений Петров[досье] Хм, у меня с одним полем получается, естественно в случае когда submit скрыт.

Если же он не скрыт то конечно от кол-ва элементов ничего не зависит, потому как "при нажатии на Enter происходит передача на первый из контролов с type="submit"" (что очевидно сделано для удобства) т.е. в любом случае нажимается кнопка.

Вопрос в том как рассматривать случай со скрытием. Отвечать на этот вопрос надо скорее всего в духе: "Стандартами это поведение не определяется, так что действуйте по обстоятельствам". А посоветовать в общем случае наверное можно лишь одно - не скрывать submit ?

спустя 13 минут [обр] Евгений Петров(76/1055)[досье]
Thirteensmay[досье] Скрытый контрол не может быть активирован. Это прямо сказано в тех же стандартах. Так что со скрытым сабмитом, скорее всего, все достаточно ясно. Кстати, а зачем его вообще скрывать?
спустя 6 часов [обр] Kleo[досье]

Евгений Петров[досье]

Кстати, а зачем его вообще скрывать?

Нестандартный случай, когда потребовалось сделать форму вообще без кнопок :-)
Что-то наподобие формы для поиска, что висит на xpoint в правом верхнем углу.

спустя 8 минут [обр] Евгений Петров(76/1055)[досье]
Kleo[досье]
Есть такая штука - position:absolute...
спустя 8 часов [обр] Thirteensmay(3/157)[досье]
или установить длину или ширину в 0, еще можно перехватывать ввод enter'а (Полезные функции) и тогда отправлять форму принудительно с помощью myform.submit(); так может быть лучше потому что кнопки не будет на самом деле.
Powered by POEM™ Engine Copyright © 2002-2005