LINUX.ORG.RU

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


0

0

Как можно отключить сабж?

Нашёл несколько решений, но хочется, чтобы удовлетворяло следующим требованиям:

- работает во всех [распространённых] браузерах

- форма не перестаёт работать при выключенном JS

- простой код (форма достаточно большая, проверять каждое условие очень не хочется)

Существует такое в природе?

★★★★

А зачем, если не секрет?

ЗЫ Можно на сервере проверять, по Enter ушла форма или нет..

boombick ★★★★★
()
Ответ на: комментарий от zJes

>Просто поставить onsubmit="return false;"?
А он не вообще отключает отправку?

boombick>А зачем, если не секрет?
Когда форма большая, велик шанс нажать Enter, например, не заметив,
что ещё не всё заполнено. Особенное, если в форме есть textarea.
Некоторые нажимают Enter вместо Tab.

У мене сейчас такой код:
	<script>
	<!--
		var moveOn = false;
		function checkSubmit() {
		    return moveOn;
		} 	
	// -->
	</script>   
...
                    <form method=post action="..." onSubmit="return checkSubmit();">
...
		<input type="submit" style="visibility:hidden; display:none;" index="-1" onClick="moveOn = false;">
		<input type="submit" value="Submit" index="2" onClick="moveOn = true;">

Как выяснилось, в каких-то версиях IE форма вообще не отправляется :(

Davidov ★★★★
() автор топика
Ответ на: комментарий от Davidov

В любом случае на сервере необходимо проверять, все ли поля заполнены. Кроме того, то же самое можно проверять и javascript'ом (но это лишь дополнение, главное - проверять на сервере и в случае чего показывать юзеру форму опять с выделенными недозаполненными полями). Так что дополнительной проблемы именно в кнопке Enter нет никакой.

Teak ★★★★★
()
Ответ на: комментарий от Davidov

> Когда форма большая, велик шанс нажать Enter, например, не заметив, что ещё не всё заполнено. Особенное, если в форме есть textarea.

В textarea нажатие Enter не отправляет форму.

Вы же в процессе написания комментов на ЛОРе жмете enter без опасений, что форма отправится =)

boombick ★★★★★
()
Ответ на: комментарий от boombick

>Вы же в процессе написания комментов на ЛОРе жмете enter без опасений, что форма отправится =)

У меня такой проблемы нет. Речь идёт о неопытных пользователях. В том случае, если они увидят ошибку, они не буду дозаполнять форму (потому что их данные нужны мне, а им не нужно ничего). Textarea лишь дополнительный фактор, усложняющий заполнение формы (надо следить, где фокус).

И вообще, вопрос технический, а не филосовский. :)

Davidov ★★★★
() автор топика
Ответ на: комментарий от Teak

Это понятно. Тут именно вопрос в том, сколько человек пройдут тест, а не уйдут не заполнив длиннющую анкету.

Вообще с тестовыми данными сложно: они почти всегда валидны (формально). Но человек легко может сознатильно испортить статистику. Но тут ничего не поделать.

Davidov ★★★★
() автор топика
Ответ на: комментарий от Davidov

> И вообще, вопрос технический, а не филосовский. :)

Ну тогда тот же путь, обрабатывать onSubmit
Только немного не так я бы сделал, попроще имхо:
<script language="JavaScript" type="text/javascript">
function formSubmit(){
    document.getElementById('form_id').submit();
}
</script>
<form action="script" id="form_id" onsubmit="return false">
<input type="button" onclick="formSubmit()" value="Send me">
</form>

Т.е. при "нормальном" сабмите формы (например по Enter)
ничего не произойдет, так как форма возвращает false по этому
событию, а при клике на обычный button (не submit), мы вызываем
функцию, которая явно отправит форму (submit();) в "обход"
события onsubmit

Примерно как-то так.. Должно во всех браузерах работать, но при
выключенном js - увы

boombick ★★★★★
()
Ответ на: комментарий от golubeff

Дык, проще. Но, действительно, если JS выключен, то форма перестаёт работать совсем :(

Davidov ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.