Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.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 计数器增加两次_Javascript - Fatal编程技术网

Javascript 计数器增加两次

Javascript 计数器增加两次,javascript,Javascript,我正在编写一个简单的JavaScript游戏,在这个游戏中,用户单击播放声音的div,如果他们猜动物的声音正确,计数器会跟踪他们的分数和增量。 它可以工作,但是如果再次播放相同的声音,并且用户猜测它会将计数器增加2而不是1,有时甚至是3,我不知道为什么以及如何修复它,下面是我的HTML: <div id="counter">Score:<span id="counter-score"> 0</span> </div> 为什么会这样 我尝试使用+=

我正在编写一个简单的JavaScript游戏,在这个游戏中,用户单击播放声音的div,如果他们猜动物的声音正确,计数器会跟踪他们的分数和增量。
它可以工作,但是如果再次播放相同的声音,并且用户猜测它会将计数器增加2而不是1,有时甚至是3,我不知道为什么以及如何修复它,下面是我的HTML:

<div id="counter">Score:<span id="counter-score"> 0</span> </div>
为什么会这样


我尝试使用+=运算符,但得到的结果相同。

正如@Ibu在评论中所说,每次单击事件发生时,都会向
keydown
事件添加一个新的事件侦听器

您应该在
player.addEventListener
回调之外提取
enteredWord.addEventListener
部分,如下所示:

function startGame() {
  var currentSound;
  player.addEventListener('click', function() {
    var sound = sounds[Math.floor(Math.random()*sounds.length)];
    currentSound = sound.animalType;
    sound['sound'].play();
  })


  enteredWord.addEventListener('keydown', function() {
    if(event.key === 'Enter') {
      if(enteredWord.value === currentSound) {
        counter.textContent ++;
      }
    }
  })
}

嗨,你能用这个代码替换你的代码吗?我认为键关闭事件执行了两次,所以你得到了这个问题

enteredWord.addEventListener('keydown', function(e) {        
     if( (e.keyCode ==13) && (enteredWord.value === currentSound)){
          e.stopImmediatePropagation();         
          counter.textContent ++;
      }
  })

您多久启动一次游戏,以及该事件多久获得一次侦听器?每次单击,都会添加一个新的按键事件。因此,在两次单击之后,keydown将被调用两次。将keydown事件移到click之外。在函数中尝试添加和删除事件侦听器…True,但我无法访问way@MurrayJohnson我的错,我只是把
currentSound
变量声明放在父函数中来修复它;
enteredWord.addEventListener('keydown', function(e) {        
     if( (e.keyCode ==13) && (enteredWord.value === currentSound)){
          e.stopImmediatePropagation();         
          counter.textContent ++;
      }
  })