Heylo guys,Javascript onkeydown事件只触发一次?
我想有一个onkeydown事件只会触发一次函数。为使该功能再次触发,用户必须释放该键并再次按住。 我知道它很简单,但即时新的JS。另外我更喜欢避免使用jquery或其他库。 还有一件事,这应该适用于ie和Firefox。
非常感谢!
Heylo guys,Javascript onkeydown事件只触发一次?
我想有一个onkeydown事件只会触发一次函数。为使该功能再次触发,用户必须释放该键并再次按住。 我知道它很简单,但即时新的JS。另外我更喜欢避免使用jquery或其他库。 还有一件事,这应该适用于ie和Firefox。
非常感谢!
你可以设置一个标志:
var fired = false;
element.onkeydown = function() {
if(!fired) {
fired = true;
// do something
}
};
element.onkeyup = function() {
fired = false;
};
或者取消并重新绑定的事件处理程序(可能更好):
function keyHandler() {
this.onkeydown = null;
// do something
}
element.onkeydown = keyHandler;
element.onkeyup = function() {
this.onkeydown = keyHandler;
};
More information about "traditional" event handling.
你也可能需要使用addEventListener
和attachEvent
来绑定事件处理程序。欲了解更多信息,请看quirksmode.org - Advanced event registration models。
JQuery的one将帮助你。
它的作用是将eventHandler绑定到事件上,并且当事件发生时,它运行eventHandler并解除绑定,以便在下一个事件中不触发它。
*我宁愿避免使用jQuery或其他库*。而“一”本身并没有帮助。你必须重新绑定事件处理程序。 – 2011-03-18 14:21:35
在这里你去:
test.onkeydown = function() {
if (this.className === 'hold') { return false; }
this.className = 'hold';
// call your function here
};
test.onkeyup = function() {
this.className = '';
};
下面是一个使用上jsfiddleaddEventListener
和removeEventListener
var textBox = document.getElementById("textBox");
function oneKeyDown(){
$("body").append("<h1>KeyDown<h1>"); //just to show the keypress
textBox.removeEventListener('keydown', oneKeyDown, false);
}
function bindKeyDown(){
textBox.addEventListener('keydown', oneKeyDown, false);
}
textBox.addEventListener('keyup', bindKeyDown, false)
bindKeyDown();
代码示例的方法。
一注意,对于IE,您将需要使用attachEvent
, detachEvent
。
您应该注意,这只适用于Webkit和Firefox。 IE使用'attachEvent'。 – 2011-03-18 14:42:10
分心,忘了提及它。感谢您的提醒。 – 2011-03-18 14:56:12
正如在其他答案中所述,没有'onkeyfirstdown'或类似的事件要监听。
最好的解决办法是跟踪哪些项已倒在一个JS对象:
var keysdown = {};
element.addEventListener('keydown', function(evt) {
if(!(evt.key in keysdown)) {
keysdown[evt.key] = true;
// key first pressed
}
});
element.addEventListener('keyup', function(evt) {
delete keysdown[evt.key];
});
这样一来,你就不会,如果超过一个键被按下跳跃“keyfirstpressed”事件。
(这里发布的许多其他解决方案只会在没有其他按键关闭时触发)。
请显示一些代码 – kjy112 2011-03-18 14:17:51