【问题标题】:javascript button key press is fired n times in n'th click event在第 n 个点击事件中,javascript 按钮按键被触发 n 次
【发布时间】:2014-11-14 00:47:08
【问题描述】:

我正在尝试构建一个有开始按钮的游戏。按下此按钮后,游戏开始。游戏有多个键盘按键事件。问题是当第 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);
                }
            }
        });

   });

}); 

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

【问题讨论】:

  • 我们需要查看更多代码来确定原因。
  • 尝试使用.one 而不是.keydown ... api.jquery.com/one
  • 你的意思是功能?
  • ...等等,也许我不明白你的问题(我的英语有点烂:D)...你需要按“开始按钮”n次还是只按一次?
  • 不要在另一个事件中绑定事件!

标签: javascript jquery


【解决方案1】:

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

$('.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) 
        ...

【讨论】:

    【解决方案2】:

    在每场比赛之后尝试类似的事情

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

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

    【讨论】:

    • 或者在点击处理程序之外设置keydown处理程序
    • 在用户按下“开始游戏”之前,他似乎不希望按键处于活动状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    相关资源
    最近更新 更多