2011-09-06 103 views
6

之前輸入壓我甚至不知道這是可能的,所以道歉,如果這是一個愚蠢的問題。檢測IME輸入的Javascript

我已經成立了一個keyup通過回調jQuery的運行功能,當用戶鍵入一個輸入框。它適用於英語。

然而,當日本/韓國/中國,函數輸入文本不叫,直到用戶確認他們的文字。

是否有可能發現,他們已經開始打字,並訪問他們的作爲,尚未完成的文本?

我想,也許這是一個操作系統級的事情,所以JavaScript並沒有對它的訪問。

編輯:我剛剛意識到,這適用於Chrome和Safari,但不是在Firefox(沒有機會在Windows上嘗試它)。因此,Chrome調用了關鍵字並且可以獲取文本。但我仍然在Firefox中遇到上述問題。

回答

5

這是Firefox中的known issue和什麼瀏覽器應該在做isn't clear

爲解決此問題,工作一個可能的方法是demonstrated here,其中的文本字段進行輪詢以更改文本(而不是依賴於事件)。

11

compositionstart,compositionupdatecompositionend事件可能會有所幫助。 它們可幫助您檢測何時使用IME輸入。

例如,考慮使用IME在日語輸入か(ka)定義。
下列事件(在所示出的順序)將被觸發:

  • ķ(IME可見)的keydown,compositionstartcompositionupdatecompositionend,輸入
  • 一個( IME可見),compositionstartcompositionupdate組合大ionend,輸入
  • 進入(IME關閉)的keydown,輸入

注意,compositon事件時,IME是可見的(前進入按下),僅啓動。另外請注意,按鍵事件未被觸發。這只是針對非IME輸入纔開啓的。

要訪問用戶的未完成的文本,您可以使用事件的data財產。

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

欲瞭解更多信息請參見MDN:compositionstartcompositionupdatecompositionendInputEvent