「keydown」イベントを使用して、入力テキスト ボックスに入力された特定の文字を置き換えています。
私が使用する場合:
document.getElementById('inputText').onkeydown = handleInputTextKeydown;
または同等の JQuery:
$('#inputText').on('keydown',handleInputTextKeydown);
期待どおりの結果が得られます。たとえば、Shift+i キーを押すと「í」と表示されます。
ただし、キーダウン フックとして addEventListner を使用すると、次のようになります。
var tb = document.getElementById('inputText');
tb.addEventListener('keydown', handleInputTextKeydown, false);
入力テキスト ボックスには、私の代替文字 (í) と 'I' (大文字の i) 'íI' の両方が表示されます。
addEventListener メソッドが 2 つの「onkeydown」フックと異なるのはなぜですか?
私のテスト ブラウザは IE 11 です。
ところで:別のstackoverflow投稿にあったキーダウンテキスト置換メソッドのバリアントを使用しています:
newKey = keyMap[keyPressed]; // Look for this key in our list of accented key shortcuts
if (newKey === undefined) {
return true; // Not in our list, let it bubble up as is
} else {
var oldValue, start, end;
oldValue = this.value; // Insert the updated key into the correct position within the edit textbox.
if (typeof this.selectionStart == "number" && typeof this.selectionEnd == "number") {
start = this.selectionStart;
end = this.selectionEnd;
this.value = oldValue.slice(0, start) + newKey + oldValue.slice(end);
}
// Move the caret
this.selectionStart = this.selectionEnd = start + 1;
return false;