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
    被触发)

  • keydown/keydup
    如果没有键盘输入(使用alt、shift、backspace和箭头键测试)

  • keydown
    仅用于制表符

Firefox上的

  • keydown/keypress/keypup
    当浏览器注册键盘输入时,同时注册退格键、箭头键、制表符(因此这里
    keypress
    即使没有输入也会触发)

  • keydown/keydup
    对于alt、shift


这并不令人惊讶,因为根据:

注:由于按键事件未被任何官方报道 规范,使用时遇到的实际行为可能 不同的浏览器、浏览器版本和平台会有所不同

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;
}
}
试试看

退格键代码为8

event.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键的精彩答案-主要用于