2011-08-30 30 views
5

poiché sappiamo che ci sono molti eventi che verranno attivati ​​durante la digitazione.Evento JQuery/DOM per digitare cinese (ibus)?

come keyup, keydown, keypress o qualcos'altro.

C'è qualche altro evento che verrà attivato solo quando il contenuto nel campo di testo viene modificato? e se non c'è, come scrivere un codice javasrcipt per realizzare questa funzione

+0

Ti dispiacerebbe elaborare più sul tuo caso d'uso? forse l'unico modo per ottenere ciò è fornire un metodo di input basato sul web. –

risposta

2

L'evento change può essere d'aiuto?

+0

No, perché la modifica rileva se il contenuto nel campo è stato modificato o meno, ma non verrà attivato a meno che non si prema invio o il campo abbia perso il focus – castiel

+0

Prima di eseguire il commit della stringa (ad esempio premere "invio"), la stringa viene effettivamente memorizzata nel buffer preedit del metodo di input. Ad esempio, il browser non saprà cosa esattamente cosa si digita prima di impegnare la stringa. –

0

Ho creato un semplice violino per determinare cosa succede quando un nodo di testo in un elemento contenteditable viene modificato da una pressione di un tasto. Mentre lo facevo, ho deciso di controllare cosa succede quando uso ibus perché uso ibus per il mio lavoro. Ho determinato che quando viene utilizzato ibus, l'unico evento tastiera generato è un evento keyup con un valore which che è inutile.

Ecco il violino che ho creato:

http://jsfiddle.net/lddubeau/jWnL3/

  1. andare a quel violino.

  2. Attiva la tua console Javascript.

  3. Fare clic su Esegui.

  4. Fare clic tra il 2dn e il terzo carattere della parola "toto".

  5. Digitare qualcosa usando ibus. Ad esempio, digita 我.

  6. L'output varia a seconda del browser. Su Chrome 29 ogni tasto viene registrato, quindi se digito 我 utilizzando il metodo tonepy ottengo keyup e keydown per ciascuno dei "w" "o" "3" e "1". (Il pinyin, il tono e premendo 1 per selezionare la prima scelta.) L'evento finale è:

    event type: keyup 
    which: 229 
    keyCode: 229 
    charCode: 0 
    node value: 
        to我to 
    

    Gli eventi prima di questo tutti hanno gli stessi valori, tranne che alcuni sono di tipo "keydown" e ovviamente il valore del nodo mostra "toto" fino all'ultimo evento.

    Su Firefox 23 un solo evento è registrato: eventi

    "event type:" "keyup" 
    "which:" 49 
    "keyCode:" 49 
    "charCode:" 0 
    "node value:" " 
        to我to 
    " 
    

    No KeyDown o di pressione dei tasti sono generati. (Quando si digita i caratteri ascii all'interno della gamma, si ottiene keydown, pressione di un tasto e keyup per ogni tasto.)

I valori di cui e keyCode non sembrano corrispondere a qualcosa di sensato. Ho esaminato l'oggetto evento passato al gestore eventi e non ho visto alcun campo che indicherebbe che l'utente ha appena digitato 我.