Win*_*ker 9 javascript javascript-events
Heylo伙计们,
我想让onkeydown事件只触发一次函数.要再次触发该功能,用户必须释放该键并再次按下/按住.我知道它相当简单,但我是JS新手.此外,我更喜欢避免使用jquery或其他库.还有一件事,这应该适用于ie和firefox.
非常感谢!
kar*_*ral 41
我很惊讶它没有被提及,还有event.repeat
:
document.addEventListener('keydown', (e) => {
if (e.repeat) return;
console.log(e.key);
});
Run Code Online (Sandbox Code Playgroud)
每次按键只会触发一次,因为按住按键后event.repeat
会转动。true
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key#keyboardevent_sequence
Fel*_*ing 20
你可以设置一个标志:
var fired = false;
element.onkeydown = function() {
if(!fired) {
fired = true;
// do something
}
};
element.onkeyup = function() {
fired = false;
};
Run Code Online (Sandbox Code Playgroud)
或者取消绑定并重新绑定事件处理程序(可能更好):
function keyHandler() {
this.onkeydown = null;
// do something
}
element.onkeydown = keyHandler;
element.onkeyup = function() {
this.onkeydown = keyHandler;
};
Run Code Online (Sandbox Code Playgroud)
您可能还想使用addEventListener
和attachEvent
绑定事件处理程序.有关这方面的更多信息,请查看quirksmode.org - 高级事件注册模型.
您可以使用一个“once”参数
https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
例如:
element.addEventListener('keydown', function(event) {
doSomething()
}, {once: true});
Run Code Online (Sandbox Code Playgroud)
一旦被调用,它就会将其删除。
removeEventListener
或者,如果它是命名函数,您可以使用
归档时间: |
|
查看次数: |
20678 次 |
最近记录: |