Вопрос

У меня есть элемент ввода с onchange="do_something()".Когда я набираю текст и нажимаю клавишу enter, он выполняется правильно (сначала do_something, затем submit) в Firefox и Chromium (не тестировался в IE и Safari), однако в Opera этого не происходит (он отправляется немедленно).Я попытался использовать задержку, подобную этой:

<form action="." method="POST" onsubmit="wait_using_a_big_loop()">
<input type="text" onchange="do_something()">
</form>

но и это не сработало.

У вас есть какие-нибудь рекомендации?

Редактировать:Наконец, я использовал сочетание решений, предоставляемых iftrue и crescentfresh, просто расфокусируйте поле для запуска метода do_something(), я сделал это, потому что в некоторых других полях ввода были другие методы onchange.

$('#myForm').submit( function(){
    $('#id_submit').focus();
} );

Спасибо

Это было полезно?

Решение

Вы могли бы использовать jquery и перехватить форму.

http://docs.jquery.com/Events/submit

<form id = "myForm">

</form>

   $('#myForm').submit( function(){
   do_something();
   } );

Это должно отправить форму после вызова этого метода.Если вам нужен более детальный контроль, введите значение return false в конце события отправки и создайте свой собственный запрос post с помощью $.post();

Другие советы

От http://cross-browser.com/forums/viewtopic.php?id=123:

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

В IE нажатие enter фокусирует кнопку отправки - таким образом, ввод текста теряет фокус, и это вызывает изменение событие.

В FF нажатие enter не фокусируется кнопка отправки, но изменение событие все еще происходит.

В Opera ни то, ни другое из вышеперечисленного не встречается.

keydown более согласован во всех браузерах для обнаружения изменений в поле.

Я не силен в Javascript, но не могли бы вы сделать что-то подобное?

<form name="myform" action="." method="POST">
<input type="text" onchange="do_something();document.myform.submit();">
</form>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top