Problema de opera con javascript en enviar
-
05-07-2019 - |
Pregunta
Tengo un elemento de entrada con onchange = " do_something () " Cuando estoy escribiendo y presionando la tecla enter, se ejecuta correctamente (do_algo primero, enviar luego) en Firefox y Chromium (no probado en IE y Safari), sin embargo, en Opera no (se envía de inmediato). Intenté usar un retraso como este:
<form action="." method="POST" onsubmit="wait_using_a_big_loop()">
<input type="text" onchange="do_something()">
</form>
pero tampoco funcionó.
¿Tienes algunas recomendaciones?
Editar: Finalmente, utilicé una combinación de las soluciones proporcionadas por iftrue y crescentfresh, simplemente desenfocando el campo para activar el método do_something (), lo hice porque otros campos de entrada tenían otros métodos de cambio.
$('#myForm').submit( function(){
$('#id_submit').focus();
} );
Gracias
Solución
Podrías usar jquery y secuestrar el formulario.
http://docs.jquery.com/Events/submit
<form id = "myForm">
</form>
$('#myForm').submit( function(){
do_something();
} );
Esto debe enviar el formulario después de llamar a ese método. Si necesita un control más preciso, lance una devolución falsa al final del evento de envío y realice su propia solicitud de publicación con $ .post ();
Otros consejos
De http://cross-browser.com/forums/viewtopic. php? id = 123 :
Por la especificación, presionando enter no es Se supone que debe disparar el cambio de evento. los cambio de evento se produce cuando un control pierde el foco y su valor ha cambiado.
Al presionar IE, se enciende el foco botón de enviar - por lo que la entrada de texto pierde el foco y esto provoca un cambio evento.
Al pulsar FF, enter no enfoca el botón enviar, pero el cambio evento sigue ocurriendo.
En Opera no ocurre nada de lo anterior.
keydown
es más consistente en todos los navegadores para detectar cambios en un campo.
No soy bueno con Javascript, pero ¿podrías hacer algo como esto?
<form name="myform" action="." method="POST">
<input type="text" onchange="do_something();document.myform.submit();">
</form>