Проблема Opera с javascript при отправке
-
05-07-2019 - |
Вопрос
У меня есть элемент ввода с 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>