JavaScript侦听器;按键;不';无法检测退格?
我正在使用一个JavaScript侦听器;按键;不';无法检测退格?,javascript,keypress,addeventlistener,Javascript,Keypress,Addeventlistener,我正在使用一个按键监听器 addEventListener("keypress", function(event){ } 然而,这似乎并没有检测到删除文本的退格 是否有其他侦听器可用于检测此问题?请尝试keydown而不是keypress 键盘事件按以下顺序发生:keydown、keydup、keypress 退格的问题可能是,浏览器将导航回keyup,因此您的页面将看不到keypress事件。仅对字符(可打印)键调用keypress事件,对所有键(包括控件、Shift、Alt、退格等不可打
按键
监听器
addEventListener("keypress", function(event){
}
然而,这似乎并没有检测到删除文本的退格
是否有其他侦听器可用于检测此问题?请尝试
keydown
而不是keypress
键盘事件按以下顺序发生:keydown
、keydup
、keypress
退格的问题可能是,浏览器将导航回
keyup
,因此您的页面将看不到keypress
事件。仅对字符(可打印)键调用keypress事件,对所有键(包括控件、Shift、Alt、退格等不可打印键)引发keypdown事件
更新:
按下某个键时会触发keypress事件,该键通常会生成一个字符值
.我写了一些东西,以防任何人遇到一个问题,即人们在认为自己在表单字段中时使用退格键
window.addEventListener("keydown", function(e){
/*
* keyCode: 8
* keyIdentifier: "U+0008"
*/
if(e.keyCode === 8 && document.activeElement !== 'text') {
e.preventDefault();
alert('Prevent page from going back');
}
});
不同浏览器的
keypress
事件可能不同
我创建了一个用于比较Chrome和Firefox上的键盘事件(使用JQuery快捷键)。根据您使用的浏览器,将触发或不触发keypress
事件——在Firefox上backspace将触发keydown/keypress/keypup
,但在Chrome上仅触发keydown/keypup
触发单键单击事件
在Chrome上
浏览器注册键盘输入时(keydown/keypress/keypup
被触发)keypress
如果没有键盘输入(使用alt、shift、backspace和箭头键测试)keydown/keydup
仅用于制表符keydown
当浏览器注册键盘输入时,同时注册退格键、箭头键、制表符(因此这里keydown/keypress/keypup
即使没有输入也会触发)keypress
对于alt、shiftkeydown/keydup
这并不令人惊讶,因为根据: 注:由于按键事件未被任何官方报道 规范,使用时遇到的实际行为可能 不同的浏览器、浏览器版本和平台会有所不同 W3C()不赞成使用按键事件类型 本规范中定义了按键事件类型,以供参考 和完整性,但本规范不推荐使用 事件类型。在编辑上下文时,作者可以订阅 而不是在输入事件之前
最后,要回答您的问题,您应该使用
keyup
或keydown
来检测Firefox和Chrome之间的退格
在这里试用:
$(“.inputxt”).bind(“按键向上键向下”,函数(事件){
var evtType=event.type;
var eWhich=事件。哪个;
var echarCode=event.charCode;
var ekeyCode=event.keyCode;
开关(EVT类型){
“按键”案例:
$(“#log”).html($(“#log”).html()+”+evtType+“+”键码:“+ekeyCode+”字符码:“+echarCode+”其中:“+eWhich+”
”;
打破
案例“keyup”:
$(“#log”).html($(“#log”).html()+”+evtType+“+”键码:“+ekeyCode+”字符码:“+echarCode+”其中:“+eWhich+””;
打破
案例“按键关闭”:
$(“#log”).html($(“#log”).html()+”+evtType+“+”键码:“+ekeyCode+”字符码:“+echarCode+”其中:“+eWhich+”
”;
打破
违约:
打破
}
});代码>
我的数控:
function CheckNumeric(event) {
var _key = (window.Event) ? event.which : event.keyCode;
if (_key > 95 && _key < 106) {
return true;
}
else if (_key > 47 && _key < 58) {
return true;
}
else {
return false;
}
}
<input type="text" onkeydown="return CheckNumerick(event);" />
函数检查数值(事件){
var_key=(window.Event)?Event.which:Event.keyCode;
如果(_键>95&&u键<106){
返回true;
}
否则如果(_键>47&&u键<58){
返回true;
}
否则{
返回false;
}
}
试试看
退格键代码为8event.key==“退格”
更新、更干净:使用事件.key
。没有更多的任意数字代码
note.addEventListener('keydown', function(event) {
const key = event.key; // const {key} = event; ES6+
if (key === "Backspace") {
// Do something
}
});
改用keyup/keydown/beforeinput事件之一
根据参考资料,keypress已弃用,不再推荐
当一个键产生一个字符值时,将触发keypress事件
被按下。生成字符值的键的示例包括
字母、数字和标点符号键。不允许使用的键的示例
通过修改键(如Alt、Shift、Ctrl、,
或元
如果您使用“beforeinput”,请小心它的错误。“beforeinput”与其他两个之间的区别在于,“beforeinput”在输入值即将更改时被激发,因此对于无法更改输入值的字符,它不会被激发(例如shift、ctr、alt)
我也遇到了同样的问题,通过使用keyup解决了这个问题。我尝试了keydown
,但没有捕获退格。切换到keyup
对我来说很有效
addEventListener("keyup", function(event){
}
仅供参考,以防有人在
上与一起使用动态生成的内容
$("body").on( "keyup", ".my-element", function(evt) {
// Do something
});
不完全正确:在许多浏览器中,许多不可打印的键会触发keypress
事件。在当前版本的Mozilla中,在按键事件中检测到backspace和all。我还没有查看标准,但事件顺序(至少在Firefox37中)似乎是keydown
keypress
keyup
。同样,对于输入中的按键事件,字符在触发keyup
事件之前不会出现在字段中。最后一个-在iOS(8.2)上,退格键只触发keydown
事件,但直到之后某个时间字符才会从输入中删除。这就是答案。这捕获了delete键和Ctrl+V键的精彩答案-主要用于