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
您可以签入键码,也可以在键入后查看。
我不想允许按功能键(如(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您可以签入键码,也可以在键入后查看。