跳到主要內容

JavaScript 偵測輸入法(IME)狀態

相關參考文章:http://mdn.beonex.com/en/DOM/CompositionEvent.html

輸入法(Input Method Editor,以下全用IME代稱)的處理一直是我們漢字文化圈的麻煩之一
在前端滿常碰到客製化 key event 的需求
當客戶按了某個鍵或輸入某段文字後會執行我們自訂的程式
只是這樣的處理方式在輸入法啟用狀態滿常有例外

例如:選字時會用到上下移動鍵,刪除、或確定選字用到 Esc、Enter、Backspace
選字的時候我們會希望在這段時間的輸入不會影響原先的狀態

麻煩的點是這一段在瀏覽器的處理並沒有完整的規範
大概是其他國家沒什麼選字的需求,即使在HTML5規格接近定稿的時刻,IME在W3C依然是草案狀態
該草案推動者是在日本Google工作的日本人,顯得願意投入的資源並不多
也因此目前瀏覽器的實作略有不同,在輸入法狀態甚至有keyup event被吃掉等等的奇怪狀態
最後我找到的是下面這樣簡單的瀏覽器共通實作,起碼在近代的瀏覽器可以簡單的判斷輸入法狀態

document.addEventListener("compositionstart", function(){
    window.IMEStatus=1;
});
document.addEventListener("compositionend", function(){
    window.IMEStatus=2;
});

至少能夠判斷那些時候是在輸入法啟用狀態,避免執行不該啟動的程式碼

留言