Как отключить отправку формы по нажатию enter?
От: Аноним  
Дата: 13.03.06 17:47
Оценка:
Поиск использовал — ни одно из предложенных ранее решений не работает в трёх браузерах IE/Opera/Firefox.
У меня получилось сделать только для IE/Opera.

Контекст задачи:
Используется что-то типа google suggest. На форме есть несколько input type=textbox-ов. При вводе значения, открывается табличка под input-ом с возможными вариантами. Вариант не вставляется сразу в textbox, как в google, а его надо выбрать самостоятельно. Варианты перебираются мышью или кнопками up/down. При клике на варианте или нажатии кнопки Enter должна произойти вставка варианта в textbox. Конечно, при нажатии Enter НЕ ДОЛЖНА происходить отправка всей формы!
Re: Как отключить отправку формы по нажатию enter?
От: SeLarin Россия http://selarin.livejournal.com
Дата: 13.03.06 18:44
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Используется что-то типа google suggest. На форме есть несколько input type=textbox-ов. При вводе значения, открывается табличка под input-ом с возможными вариантами. Вариант не вставляется сразу в textbox, как в google, а его надо выбрать самостоятельно. Варианты перебираются мышью или кнопками up/down. При клике на варианте или нажатии кнопки Enter должна произойти вставка варианта в textbox. Конечно, при нажатии Enter НЕ ДОЛЖНА происходить отправка всей формы!


После обработки сообщения прерывать "всплывание" сообщения в DOM, с помощью event.stopPropagation или отменять его с помощью event.preventDefault. Не могу ничего сказать о кроссбраузерности этого подхода, поскольку самому писать пример очень лень.


Во всем нужна мера, даже в том, чтобы соблюдать ее.
Re: Как отключить отправку формы по нажатию enter?
От: Rumata Россия http://atamur.livejournal.com
Дата: 14.03.06 06:45
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Поиск использовал — ни одно из предложенных ранее решений не работает в трёх браузерах IE/Opera/Firefox.

А>У меня получилось сделать только для IE/Opera.

А>Контекст задачи:

А>Используется что-то типа google suggest. На форме есть несколько input type=textbox-ов. При вводе значения, открывается табличка под input-ом с возможными вариантами. Вариант не вставляется сразу в textbox, как в google, а его надо выбрать самостоятельно. Варианты перебираются мышью или кнопками up/down. При клике на варианте или нажатии кнопки Enter должна произойти вставка варианта в textbox. Конечно, при нажатии Enter НЕ ДОЛЖНА происходить отправка всей формы!
В событии onSubmit формы проверять флаг.
Это событие имхо кросбраузерно на все 100, иначе никакие JS валидаторы не работали бы
Re[2]: Как отключить отправку формы по нажатию enter?
От: Аноним  
Дата: 14.03.06 18:17
Оценка:
Здравствуйте, Rumata, Вы писали:

R>Здравствуйте, Аноним, Вы писали:


А>>Поиск использовал — ни одно из предложенных ранее решений не работает в трёх браузерах IE/Opera/Firefox.

А>>У меня получилось сделать только для IE/Opera.

А>>Контекст задачи:

А>>Используется что-то типа google suggest. На форме есть несколько input type=textbox-ов. При вводе значения, открывается табличка под input-ом с возможными вариантами. Вариант не вставляется сразу в textbox, как в google, а его надо выбрать самостоятельно. Варианты перебираются мышью или кнопками up/down. При клике на варианте или нажатии кнопки Enter должна произойти вставка варианта в textbox. Конечно, при нажатии Enter НЕ ДОЛЖНА происходить отправка всей формы!
R>В событии onSubmit формы проверять флаг.
R>Это событие имхо кросбраузерно на все 100, иначе никакие JS валидаторы не работали бы

Помогло, но не совсем.

Действительно, валидаторы работают везде.
Как определить, действительно ли нажата кнопка submit, а не enter на форме?
Я для этого использую переменную, которая сначала false, а при нажатии кнопки становится true.
Нажатие кнопки определяю по событию onclick и onkeydown на ней.

Проблема в том, что при нажатии enter на форме вызывается событие onclick на submit кнопке.
http://msdn.microsoft.com/workshop/author/dhtml/reference/events/onclick.asp?frame=true
— здесь про это написано.
Хотя, в действительности, такое происходит только в Opera.
Re[3]: Как отключить отправку формы по нажатию enter?
От: Rumata Россия http://atamur.livejournal.com
Дата: 14.03.06 18:40
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Помогло, но не совсем.


А>Действительно, валидаторы работают везде.

А>Как определить, действительно ли нажата кнопка submit, а не enter на форме?
А>Я для этого использую переменную, которая сначала false, а при нажатии кнопки становится true.
А>Нажатие кнопки определяю по событию onclick и onkeydown на ней.

А>Проблема в том, что при нажатии enter на форме вызывается событие onclick на submit кнопке.

А>http://msdn.microsoft.com/workshop/author/dhtml/reference/events/onclick.asp?frame=true
А>- здесь про это написано.
А>Хотя, в действительности, такое происходит только в Opera.
Ну дык, не используйте submit кнопку, используйте просто button с обработчиком onClick
Re[4]: Как отключить отправку формы по нажатию enter?
От: Аноним  
Дата: 14.03.06 21:43
Оценка:
Здравствуйте, Rumata, Вы писали:

R>Здравствуйте, Аноним, Вы писали:


А>>Помогло, но не совсем.


А>>Действительно, валидаторы работают везде.

А>>Как определить, действительно ли нажата кнопка submit, а не enter на форме?
А>>Я для этого использую переменную, которая сначала false, а при нажатии кнопки становится true.
А>>Нажатие кнопки определяю по событию onclick и onkeydown на ней.

А>>Проблема в том, что при нажатии enter на форме вызывается событие onclick на submit кнопке.

А>>http://msdn.microsoft.com/workshop/author/dhtml/reference/events/onclick.asp?frame=true
А>>- здесь про это написано.
А>>Хотя, в действительности, такое происходит только в Opera.
R>Ну дык, не используйте submit кнопку, используйте просто button с обработчиком onClick
А если javascript отключён?
Re[4]: Как отключить отправку формы по нажатию enter?
От: Аноним  
Дата: 14.03.06 22:39
Оценка:
Здравствуйте, Rumata, Вы писали:

R>Здравствуйте, Аноним, Вы писали:


А>>Помогло, но не совсем.


А>>Действительно, валидаторы работают везде.

А>>Как определить, действительно ли нажата кнопка submit, а не enter на форме?
А>>Я для этого использую переменную, которая сначала false, а при нажатии кнопки становится true.
А>>Нажатие кнопки определяю по событию onclick и onkeydown на ней.

А>>Проблема в том, что при нажатии enter на форме вызывается событие onclick на submit кнопке.

А>>http://msdn.microsoft.com/workshop/author/dhtml/reference/events/onclick.asp?frame=true
А>>- здесь про это написано.
А>>Хотя, в действительности, такое происходит только в Opera.
R>Ну дык, не используйте submit кнопку, используйте просто button с обработчиком onClick

Пока от безысходности реализовал это чрезвычайно тупым способом:

enter_key_pressed = false;
    
    form.onsubmit = function()
    {
        return !enter_key_pressed;
    }

//... где-то внутри input.onkeydown case event.keyCode == 13

bind_for_a_moment('this.enter_key_pressed', true);

// ...

function bind_for_a_moment(var_name, value, timeout)
{
    var old_value = eval(var_name);
    eval(var_name + " = " + value.toString());
    setTimeout(function()
        {
            eval(var_name + " = " + old_value);
        }, timeout || 10);
}
Как отключить отправку формы по нажатию enter?
От: Neron Германия  
Дата: 28.03.06 21:12
Оценка:
#Имя: FAQ.web.enter.no.submit
Здравствуйте, Аноним, Вы писали:

А>Используется что-то типа google suggest. На форме есть несколько input type=textbox-ов. При вводе значения, открывается табличка под input-ом с возможными вариантами. Вариант не вставляется сразу в textbox, как в google, а его надо выбрать самостоятельно. Варианты перебираются мышью или кнопками up/down. При клике на варианте или нажатии кнопки Enter должна произойти вставка варианта в textbox. Конечно, при нажатии Enter НЕ ДОЛЖНА происходить отправка всей формы!


Нам необходимо сделать всего три простых действия:
1) Блокировать всплывающее событие onsubmit
2) Вместо кнопки submit использовать button с событием onclick
3) Вынести кнопку за пределы формы, чтобы обмануть "умные" браузеры, типа Opera

Пример:
<form name="myform" action="sample.com" method="POST" onsubmit="return false;">
<input type="text" name="test">
</form>
<input type="button" value="Отправить" onclick="document.forms['myform'].submit();">


P.S. Проверил, работает на IE, Opera и Firefox
На остальных не проверял, должно работать по идее...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.