Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript firefox上的双事件on keydown事件_Javascript - Fatal编程技术网

Javascript firefox上的双事件on 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

我不明白为什么在Firefox中,当我用空格启动keydown事件时,我的点击事件也会启动

没有问题

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按钮的设计模式:有与空间和回车的交互。