出于原因,我必须依赖keypress
而不是keydown/keyup
。如果按下该键,keypress
会反复触发事件。如何只跟踪第一次按键?
对于keydown/keyup
,这不会有问题,因为有一个专门的keyup
事件。但keypress
不是这种情况。
答案 0 :(得分:1)
检查事件的“重复”属性(https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent)
如果它是假的那么它是第一个事件,否则为真。
使用jquery的示例:
$("#someid").on("keypress", function(e){
if(!e.originalEvent.repeat){console.log("first keypress")};
})
答案 1 :(得分:0)
“重复”属性确实在Safari中不起作用。它仅适用于基于Gecko的浏览器。代替这一点,试试这个(如果你绝对必须使用“按键”而不是替代品):
var lastCode = -1;
$("#someid").on("keypress", function(e) {
var code = e.keyCode || e.which;
if (lastCode !== code) {
// do something
}
lastCode = code;
});