這個問題有點老了但我今天才碰到,之前不知道都怎樣混過去的(?) 反正碰到了就記錄一下
如果是輸入中文字(注音)的話,使用 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
留言列表