Problema di Opera con JavaScript sull'invio
-
05-07-2019 - |
Domanda
Ho un elemento di input con onchange = " do_something () " ;. Quando sto digitando e premo il tasto Invio, viene eseguito correttamente (do_something prima, invia quindi) su Firefox e Chromium (non testato in IE e Safari), tuttavia in Opera non funziona (si invia immediatamente). Ho provato a usare un ritardo come questo:
<form action="." method="POST" onsubmit="wait_using_a_big_loop()">
<input type="text" onchange="do_something()">
</form>
ma non ha funzionato neanche.
Hai qualche consiglio?
Modifica: Alla fine ho usato un mix delle soluzioni fornite da iftrue e crescentfresh, ho semplicemente sfocato il campo per lanciare il metodo do_something (), l'ho fatto perché alcuni altri campi di input avevano altri metodi onchange.
$('#myForm').submit( function(){
$('#id_submit').focus();
} );
Grazie
Soluzione
Puoi usare jquery e dirottare il modulo.
http://docs.jquery.com/Events/submit
<form id = "myForm">
</form>
$('#myForm').submit( function(){
do_something();
} );
Questo dovrebbe inviare il modulo dopo aver chiamato quel metodo. Se hai bisogno di un controllo più accurato, lancia un ritorno falso alla fine dell'evento di invio ed effettua la tua richiesta di post con $ .post ();
Altri suggerimenti
Da http://cross-browser.com/forums/viewtopic. ? php id = 123 :
Per le specifiche, premendo Invio non lo è dovrebbe sparare l'evento del cambiamento. Il L'evento change si verifica quando un controllo perde attenzione e il suo valore è cambiato.
In IE premendo Invio si mette a fuoco il pulsante di invio - quindi l'inserimento del testo perde attenzione e questo provoca un cambiamento evento.
In FF premendo Invio non si mette a fuoco il pulsante di invio, ma la modifica l'evento si verifica ancora.
In Opera non si verifica nessuna delle precedenti.
keydown
è più coerente tra i browser per rilevare le modifiche in un campo.
Non sono bravo in Javascript, ma potresti fare qualcosa del genere?
<form name="myform" action="." method="POST">
<input type="text" onchange="do_something();document.myform.submit();">
</form>