Questo mi sta facendo impazzire. È difficile da spiegare ma ci provo.Ho problemi con l'evento keydown e completamento automatico in Firefox su mac
Ho un campo di testo di input sulla prima pagina del mio sito. Ho codificato un osservatore di eventi keydown che controlla il keyCode e se è ENTER (o equiv), controlla il valore di input (email). Se l'e-mail è valida e unica nel DB, verrà inviato il modulo. Roba di base, o così si potrebbe pensare.
Se digito il mio indirizzo e-mail nel campo e premo invio, funziona perfettamente con tutti i browser. Tuttavia, se digito la prima coppia di lettere, e poi usare i tasti freccia per selezionare l'e-mail dalla casella a discesa della cronologia (spero tu sappia cosa intendo qui), e quindi premi invio il risultato è diverso. Il valore del campo modulo viene catturato come solo la coppia di lettere che ho digitato, e quindi la validazione sta fallendo. Sembra che quando premo il tasto Invio per "selezionare" l'e-mail dal menu a discesa della cronologia, il browser lo interrompe come se stessi scrivendo.
In Chrome e Safari funziona come dovrebbe. Come dovrebbe significare che quando si preme Invio per "selezionare" l'e-mail dal menu a discesa della cronologia, tutto ciò che fa è mettere quell'indirizzo e-mail nella casella di testo. Solo premendo il secondo tasto INVIO, viene attivato l'osservatore dell'evento e l'e-mail viene convalidata.
Spero che qualcuno possa far luce sul perché questo sta accadendo ... Il mio istinto è una cosa da browser e sarà qualcosa che non posso aggiustare.
Grazie Lee
EDIT: Per aggiungere un chiarimento alla mia domanda mi permetta di aggiungere che Im utilizzando l'evento "KeyDown" per catturare il momento in cui viene premuto il tasto Invio. Ho provato l'evento "keyup" e questo ha risolto il mio problema sopra, ma poi non riesco a fermare il modulo che presenta da solo. L'evento "keyup" si attiva dopo il comportamento predefinito, quindi non è la scelta giusta per questo.
ULTERIORI EDIT:
Grazie ancora, e btw, il tuo inglese è eccellente (in risposta al tuo commento su Bad English).
ho cambiato il mio gestore di eventi da questo:
$("emailInputBox").observe("keydown", function(event) {
return submitViaEnter(event, submitSignupFormOne);
});
a questo:
$("emailInputBox").observe("keydown", function(event) {
setTimeout(submitViaEnter.curry(event, submitSignupFormOne),0);
});
submitViaEnter
:
function submitViaEnter(event, callback) {
var code = event.keyCode;
if (code == Event.KEY_RETURN) {
event.stop();
return callback(event);
}
return true;
}
sembra funzionare, ma il problema ora è che il browser è consentito eseguire l'azione predefinita prima di eseguire lo submitViaEnter
funzione che significa che il modulo viene inviato quando premo INVIO.
Grazie !! Ive ha lavorato intorno disabilitando la funzionalità di completamento automatico per il modulo, ma non mi piace. Sai cos'è "il time-out" e, in caso affermativo, puoi elaborare per favore? Grazie ancora. –
@LeeRM: nella chiamata al gestore di keydown setTimeout (handler2, 0) e sposta il codice di convalida in | function handler2() {} |. – Nickolay
oh capisco. Mi dispiace se sono spesso qui. Proprio quando penso che sto diventando bravo in questa roba ... Qual è il risultato di questo? So che risolve il problema che sto avendo ma come? Mi piace capire cosa sta succedendo. Grazie per l'aiuto! –