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

¿Fue útil?

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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top