2011-09-06 10 views
6

Non sono nemmeno sicuro che sia possibile, quindi scusatevi se si tratta di una domanda stupida.Rilevamento dell'ingresso IME prima dell'inserimento premuto Javascript

Ho impostato un callback keyup tramite jQuery per eseguire una funzione quando un utente digita in una casella di input. Funziona bene per l'inglese.

Tuttavia, quando si immette il testo in giapponese/coreano/cinese, la funzione non viene chiamata fino a quando l'utente non conferma il proprio testo.

È possibile rilevare che hanno iniziato a digitare e accedere al loro testo non ancora terminato?

Sto pensando che forse è una cosa a livello di sistema operativo, quindi Javascript non ha accesso ad esso.

Modifica: Ho appena realizzato che questo funziona in Chrome e Safari, ma non in Firefox (non ho ancora avuto la possibilità di provarlo su Windows). Quindi Chrome chiama keyup ed è possibile ottenere il testo. Ma sto ancora avendo il problema sopra in Firefox.

risposta

5

Questo è un known issue in Firefox e quali browser devono fareisn't clear.

Un possibile metodo per aggirare questo problema è demonstrated here, in cui il campo di testo viene interrogato per modifiche al testo (piuttosto che basarsi su eventi).

11

I compositionstart, compositionupdate e compositionend eventi potrebbe essere utile. Ti aiutano a rilevare quando viene utilizzato l'input IME.

Ad esempio, si consideri l'utilizzo di un IME per digitare か (ka) in giapponese.
I seguenti eventi (nell'ordine indicato) sarebbero sparati:

  • k (IMO visibile) keydown, compositionstart, compositionupdate, compositionend, ingresso
  • un (Visibile IME), compositionstart, compositionupdate, composit ionend, ingresso
  • immettere (IMO chiuso) keydown, ingresso

noti che gli eventi Compositon vengono generati solo quando l'IMO è visibile (prima immettere viene premuto). Si noti inoltre che l'evento della pressione di tasto non viene generato. Questo è attivato solo per l'input non IME.

Per accedere testo incompiuto dell'utente, è possibile utilizzare la proprietà data della manifestazione.

$('#input').on('compositionupdate', function(e) { 
    console.log(e.data); 
}); 

Per maggiori informazioni visita MDN: compositionstart, compositionupdate, compositionend, InputEvent.

Problemi correlati