這個問題有點老了但我今天才碰到,之前不知道都怎樣混過去的(?) 反正碰到了就記錄一下

如果是輸入中文字(注音)的話,使用 keypress 事件都不會被觸發,只有英數可以,所以要用 keydown

用 keydown 輸入中文(注音)的話就沒問題,但是 keyCode 都會是 229

然後 keypress 跟 keydown 都有事件觸發當下取不到值的問題

如下圖輸入 12,但第一個抓到的是空字串

這時候可以用 setTimeout 稍微延遲一下即可,延遲時間最好 100~300 毫秒

$("#text").keydown(function (e) {
    setTimeout(function () {
        //...............
    },200);
});

不要延遲太久,不然以下圖的狀況你會看到兩個 12,而不是 1、12

如果你不想使用 setTimeout 去延遲的話,可以用以下這個 input 事件來做

參考資料:https://stackoverflow.com/questions/10911047/keydown-event-new-value

$("#text").on("input", function (e) {
     // 這邊就可以馬上接到值
});

這樣就可以馬上接到值,而且輸入中文也沒問題了

但是要注意就沒有 keyCode 值可以接,所以不能判斷使用者到底按了什麼

 

所以總結一下:

1. keypress 事件時不能抓取中文輸入的文字,所以要用 keydown

2. 但是 keydown 跟 keypress 都不能立即的抓到輸入的文字,所以要用 setTimeout 來延遲

3. 如果不想那麼複雜,可以使用 input 事件,但是缺點是不能抓到 keyCode

 

參考資料:

keydown event new value

https://stackoverflow.com/questions/10911047/keydown-event-new-value

 

 

創作者介紹
創作者 小雕 的頭像
小雕

小雕雕的家

小雕 發表在 痞客邦 留言(0) 人氣()