我正在使用“keydown”事件来替换在输入文本框中键入的特定字符。
当我使用:
document.getElementById('inputText').onkeydown = handleInputTextKeydown;
或等效的 JQuery:
$('#inputText').on('keydown',handleInputTextKeydown);
我得到了预期的结果 - 例如,按键 Shift+i 显示为“í”。
但是,如果我使用 addEventListner 作为 keydown 挂钩:
var tb = document.getElementById('inputText');
tb.addEventListener('keydown', handleInputTextKeydown, false);
输入文本框同时显示我的替代字符 (í) 和“I”(大写 i)“íI”。
为什么 addEventListener 方法与两个 'onkeydown' 钩子不同?
我的测试浏览器是 IE 11。
顺便说一句:我正在使用另一个 stackoverflow 帖子中的 keydown 文本替换方法的变体:
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;