我正在製作一個小文字遊戲,我需要獲取用戶在鍵盤上輸入的最後一個字符。我想到了兩種方法來做到這一點。在鍵盤事件上獲取正確的字符
第一個是通過監聽文檔鍵盤事件並通過鍵碼獲取每個字符。它工作得很好,直到我開始用鍵盤死鍵(如Â)寫字符。 String.fromCharCode(e.keyCode)將其轉換爲A,因爲keyCode用於A,但事件似乎沒有關於事件產生的死鍵或實字符的事件。
第二個問題是保持隱藏的輸入總是聚焦(壞),並且鍵盤事件獲取輸入值的最後一個字符,但是這隻有在我寫得相當慢時纔有效。我的代碼如下所示:
function is_char(e){
return (!e.ctrlKey && !e.altKey && !e.metaKey &&
(e.keyCode >= 65 && e.keyCode <= 90) ||
(e.keyCode >= 97 && e.keyCode <= 122)
);
}
$('#fake_input').on('keyup', function(e){
if (is_char(e)){
$('#result').append(this.value[this.value.length - 1]);
}
}).focus();
這裏工作的例子 - http://jsfiddle.net/YkaBm/1/ - 你應該輸入下面的同一個詞,但是當你寫快一點事實證明是錯誤的。
你有一些建議如何獲得鍵盤事件的真實(正確)字符或爲什麼輸入鍵值事件是這樣的?
更新!
正如我在評論中提到semir.babajic答案也不太工作,我的情況,但由於森馬我發現,這種無聊的解決方案的工作原理:
function is_char(e){
return (!e.ctrlKey && !e.altKey && !e.metaKey &&
(e.keyCode >= 65 && e.keyCode <= 90) ||
(e.keyCode >= 97 && e.keyCode <= 122)
);
}
var x = 0;
$('#fake_input').on('keyup', function(e){
if (e.keyCode === 8){
x--;
}
else if (is_char(e)){
x++;
$('#result').append(this.value[x-1]);
}
}).focus();
我還是很想找到一種方法使用任何$(文檔)鍵盤事件從鍵盤事件中獲取真實的字符,因爲保持輸入焦點似乎不是一個好的解決方案。
更新2!
萬一其他人是否有類似的問題,我發現這個解決方案的最佳:
App.insert_char = function(c){
if (c && c.toUpperCase() != c.toLowerCase()){
console.log(c);
}
};
if ('oninput' in $('#fake_input')[0]){
$('#fake_input').on('input', function(e){
App.insert_char(this.value[this.value.length - 1]);
});
}
else if ('onpropertychange' in $('#fake_input')[0]){
$('#fake_input').on('propertychange', function(e){
App.insert_char(this.value[this.value.length - 1]);
});
}
else if ('ontextInput' in $('#fake_input')[0]){
$('#fake_input').on('textInput', function(e){
App.insert_char(this.value[this.value.length - 1]);
});
}
這將無法正常工作,因爲如果通過Alt + 0192 –
輸入了該字符,它會起作用,現在這是一個更好的版本。 http://jsfiddle.net/YkaBm/8/ –
我站好了。 :)我最好刪除我正在處理的答案! –