Ho avuto un problema simile prima. Per quanto ne so, il browser non genera eventi quando l'utente incolla tramite clic destro, né quando seleziona dall'elenco di valori usati in precedenza.
Ho finito per risolverlo in un modo abbastanza buono legando inoltre il mio gestore di eventi all'evento di sfocatura. L'unico caso che questo non ha catturato è stato quando si incolla un valore con il mouse, quindi premi Invio per inviarlo. Sono stato in grado di aggirare questo attraverso un po 'di aggiustamenti:
$(element)
.bind('keydown blur', handlerFunction)
.keydown(function(event) {
if (event.keyCode === 13 /* Enter Key */) {
event.preventDefault();
event.stopPropagation();
}
})
.keyup(function(event) {
if (event.keyCode === 13 /* Enter Key */) {
$(this).closest('form').submit();
}
});
In sostanza, questo funziona perché jQuery eseguirà gli eventi nell'ordine in cui erano legati. Normalmente, l'invio del modulo avviene sul key-down di un tasto Invio. Per dare al gestore del keyup il tempo di fare la sua magia, è necessario ritardare l'invio del modulo fino a quando non si verifica l'evento keyup, quindi l'altro gestore di chiavi può essere eseguito per primo.
Ora, hai detto che stavi usando un plug-in che aggiunge un ritardo prima di reagire all'evento degli utenti. Ciò significa che potresti non essere in grado di utilizzare questa tecnica alla lettera. Una cosa che potrebbe funzionare, invece, sarebbe chiamare direttamente la funzione del gestore prima di consentire al modulo di inviare. Per fare questo, è necessario modificare l'ultimo gestore keyup a:
.keyup(function(event) { // Part 2
if (event.keyCode === 13 /* Enter Key */) {
handlerFunction.call(this, event); // force it to happen now
$(this).closest('form').submit();
}
});
Come Josh K accennato prima, si potrebbe semplicemente associare qualcosa alla manifestazione inviare sul modulo per fare qualcosa di simile. Se stai facendo Ajax lì, però, assicurati di impostare async: false
nelle opzioni passate, altrimenti il modulo andrà avanti e invierà senza attendere il completamento della chiamata.