我不想允许按(F1,F2..etc),表格键等功能键,也不要添加任何字符。
代码中的那个代码不能在我的网站上运行。
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>
&#13;
答案 0 :(得分:1)
因为超出可用字符范围[32, 126]
的转换字符代码会生成""
,而它看起来像一个空字符串,它会占用长度,并且不能像空格一样修剪,所以"apple" + "ctrl"
的长度为6
,而显示为"apple"
时,最好使用
if (e.keyCode < 32 || e.keyCode > 126) {
// This is not a valid char, do something to ignore
}
忽略那些特殊字符,而不是将其转换为字符串,追加到当前值,然后与oldValue进行比较。
答案 1 :(得分:1)
当你写作时
template<typename... Args>
void operator()(Args&&... args)
{
for (auto const & listener : Listeners)
{
if (auto locked = std::get<0>(listener).lock())
std::get<1>(listener)(std::forward<Args>(args)...);
}
}
然后你总是得到一个字符串,即使你按下你没有看到值的任何变化,String.fromCharCode(e.keyCode)得到的东西,键的字符串格式,它不是空白字符串,所以你总是在if。
中得到错误您可以登记密钥代码,也可以在密钥后检查。
答案 2 :(得分:0)
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;
})