Textarea 中的 keydown 之前和之后是什么?

What is before and after keydown in Textarea?

我不想允许按功能键(如(F1,F2..等),表格键,也不要添加任何字符。

下面的代码无法在我的网站上运行。

document.getElementById("code").addEventListener("keydown",function(e){
    var oldOne = this.value;
 var newOne = (this.value + String.fromCharCode(e.keyCode)).toLowerCase();
    if(oldOne==newOne){
        e.preventDefault();
    }
 document.getElementById('message').innerHTML = "Is it the same: "+(oldOne==newOne)+", Before: "+oldOne+", After: "+newOne;
})
<textarea id="code"></textarea>
<div id="message"></div>

keydown 事件为您提供对象在您的角色被写入之前的状态。 `keyup 事件为您提供对象写入后的状态。

你可能想做这样的事情 (fiddle):

document.getElementById("ta").addEventListener("keydown", function () {
    this.oldValue = this.value;
});
document.getElementById("ta").addEventListener("keyup",function(e){
    var oldOne = this.oldValue;
    var newOne = this.value;
    if(oldOne == newOne){
        e.preventDefault();
    }
    document.getElementById('message').innerHTML = "Is it the same: "+(oldOne==newOne)+", Before: "+oldOne+", After: "+newOne;
})

因为转换超出可用字符范围[32, 126]的字符码会产生"",虽然它看起来像一个空字符串,但它占了长度,不能是[=21] =] 就像 space,所以 "apple" + "ctrl" 的长度是 6 而它显示为 "apple",你最好使用

if (e.keyCode < 32 || e.keyCode > 126) {
  // This is not a valid char, do something to ignore
}

忽略那些特殊字符,而不是将其转换为字符串,附加到当前值然后与旧值进行比较。

当你写作时

String.fromCharCode(e.keyCode)

然后你总是得到一个字符串,即使你按下虽然你没有看到值的任何变化,String.fromCharCode(e.keyCode) 正在得到一些东西,字符串格式关键,它不是空字符串,所以你总是在 if.

中得到 false

您可以签入键码,也可以在键入后查看。