Javascript firefox上的双事件on keydown事件
我不明白为什么在Firefox中,当我用空格启动keydown事件时,我的点击事件也会启动 没有问题Javascript firefox上的双事件on keydown事件,javascript,Javascript,我不明白为什么在Firefox中,当我用空格启动keydown事件时,我的点击事件也会启动 没有问题 var eventFunction = function(e) { if (content.style.display === 'none' || content.style.display === '') { content.style.display = 'block'; } else { content.style.display = 'none'; } } b
var eventFunction = function(e) {
if (content.style.display === 'none' || content.style.display === '') {
content.style.display = 'block';
} else {
content.style.display = 'none';
}
}
button.addEventListener('click', function(e){
console.log('click');
eventFunction(e);
this.removeEventListener('click', eventFunction, false);
}, false);
button.addEventListener('keydown', function(e) {
console.log('keydown');
if(e.keyCode === 13 || e.keyCode === 32) {
eventFunction(e);
e.stopPropagation();
e.preventDefault();
this.removeEventListener('keydown', eventFunction, false);
}
}, false);
此处演示:在Firefox中,释放按键时会触发click事件。监听
keyup
调用第二个事件的preventDefault()
:
var-button=document.querySelector('button');
按钮。addEventListener('click',函数(){
console.log('clicked');
});
按钮。addEventListener('keydown',函数(e){
如果(e.key==''| | e.key===='Enter'){
e、 预防默认值();
console.log('Space或Enter');
}
});
按钮。addEventListener('keyup',函数(e){
如果(e.key==''| | e.key===='Enter'){
e、 预防默认值();
}
});代码>
按我
e.停止播放()代码>你需要什么。否按按键时单击触发。空格键触发单击,就像enter键一样。@epascarello是的,但e.preventDefault()
阻止这种情况在chrome中发生。对于firefox或类似的东西,可能需要防止默认的keypress
。@epascarello chrome不这么认为。然而,即使firefox这样做,我认为按钮上的键事件不是正确的想法。与问题无关,但this.removeEventListener('keydown',eventFunction,false)代码>不会做任何事情。这不会解除你所处事件的绑定。@Sergey Gultyaev按钮的设计模式:有与空间和回车的交互。