打破$(document).bind('keydown',function(e){}); 功能

Cav*_*man -1 html javascript keyboard jquery

$(document).ready(function(){
    $(document).bind('keydown',function(e){
        key  = e.keyCode;
        if(key == 37){
            left();
        }else if(key == 38){
            up();
        }else if(key == 39){
            right();
        }else if(key == 40){
            down();
        }
    });
            alert("Hi");
});
Run Code Online (Sandbox Code Playgroud)

"嗨"只提醒一下我怎么能$(document).bind在它开始后突破?喜欢break;或者return;可能的东西?

ahr*_*ren 6

"嗨"只发出一次警报,因为它不在keydown处理程序中......它在ready处理程序中.

$(document).ready(function(){
    $(document).bind('keydown',function(e){
        key  = e.keyCode;
        if(key == 37){
            left();
        }else if(key == 38){
            up();
        }else if(key == 39){
            right();
        }else if(key == 40){
            down();
        }
    });// keydown handler ends here
            alert("Hi");
});
Run Code Online (Sandbox Code Playgroud)

另外作为旁注,尝试使用console方法而不是alert(),因为它可以更具描述性,并且它是非阻塞的.

UPDATE

我可以从下面的评论中看到你对你的代码中实际发生的事情感到很困惑......所以让我们逐步完成它.

$(document).ready(function(){
Run Code Online (Sandbox Code Playgroud)

在这里,您将处理程序绑定到DOM ready事件.当浏览器完成文档结构的构建时,这会被触发.它不会考虑任何需要加载的外部资产.

$(document).bind('keydown', function(e){
Run Code Online (Sandbox Code Playgroud)

现在我们将处理程序绑定到keydown事件.当事件冒泡到达水平时,将执行函数内的任何内容(并且在函数内).keydowndocument

key = e.keyCode;
Run Code Online (Sandbox Code Playgroud)

您将keyCode事件的属性分配给key变量.我建议在它之前加上关键字var,以保持范围.var key = e.keyCode;

if(key == 37){
    left();
}else if(key == 38){
    up();
}else if(key == 39){
    right();
}else if(key == 40){
     down();
}
Run Code Online (Sandbox Code Playgroud)

现在,你通过一系列的跳跃if/ else块,并调用left,up,rightdown功能如果先前声明的key变量相匹配的条件之一.

});
Run Code Online (Sandbox Code Playgroud)

这是结束了的keydown处理程序.

alert("Hi");
Run Code Online (Sandbox Code Playgroud)

在这里你alert()留言.这是在keydown处理程序为BOUND 之后直接完成的,但不是在每次执行或执行所述处理程序之后.该行作为文档ready处理程序的一部分执行ONCE .

});
Run Code Online (Sandbox Code Playgroud)

这是文档ready处理程序的结束.

  • @Caveman - 你显然很困惑.`keydown`没有_loop_,每次按_key_时都会执行_down_.当文档准备就绪时,您当前的代码将执行**一次**.它_binds_一个keydown函数到文档,但这个事件处理程序永远不会被触发,直到用户按下一个键.你究竟想做什么? (2认同)