JavaScript 按钮按键在第 n 次点击事件中触发 n 次

javascript button key press is fired n times in n'th click event

本文关键字:事件 按钮 JavaScript      更新时间:2023-09-26

我正在尝试构建一个有开始按钮的游戏。按下此按钮后,游戏开始。游戏有多个键盘按键事件。问题是当按下第 n 次开始按钮并且游戏开始运行第 n 次时,对于每个键盘按键事件,程序都会进行 n 次按键。下面是代码。

$(document).ready(function(){
   $('.start_game').click( function(){
        $(document).keydown(function(e){ // left button
            if (e.keyCode == 37 && game_over_flag == 0) 
            { 
                if(a!=0)    
                {
                    remove_obj(a,b);
                    a=a-1;
                    placement(a,b); 
                    check_collision(a,b);
                }
            }
        });
   });
}); 

因此,当第二次按下开始游戏然后按下箭头按钮时,需要单击两次。对于第三次启动游戏按钮单击,每个击键工作三次,而对于单击,我需要一次执行。请帮忙。

每次单击该按钮时,它都会添加新的事件处理程序。所以你需要解绑它。

$('.start_game').click( function () {
    $(document).off("keydown.game").on("keydown.game", function (e) {
    ...

或者最好不要绑定在点击事件中,使用标志。

$(document).ready(function(){
    var isActive = false;
    $('.start_game').click( function(){
        isActive = true
    });
    $(document).keydown(function(e){ // left button
        if (!isActive) {
            return;
        }
        if (e.keyCode == 37 && game_over_flag == 0) 
        ...

每场比赛结束后,尝试类似

$(document).unbind('keydown');

每次用户单击时都会绑定一个新的事件处理程序。