“嗨”只发出一次警报,因为它不在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");
});
另外作为旁注,请尝试使用console
方法而不是alert()
,因为它可以更具描述性并且是非阻塞的。
更新
我可以从下面的评论中看到您对代码中实际发生的事情感到非常困惑......所以让我们逐步了解一下。
$(document).ready(function(){
在这里,您将处理程序绑定到DOM ready
事件。当浏览器完成构建文档结构时,它会被触发。它没有考虑任何需要加载的外部资产。
$(document).bind('keydown', function(e){
现在我们将处理程序绑定到keydown
事件。当事件冒泡到级别时,函数内的任何内容(并且仅在函数内)都将被执行。keydown
document
key = e.keyCode;
您将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();
}
现在,您将跳过一系列if
/else
块,如果先前声明的变量与您的条件之一匹配,则调用left
、和函数。up
right
down
key
});
这是处理程序的结束keydown
。
alert("Hi");
给你alert()
留言。这是在keydown
处理程序绑定后直接完成的,而不是在每次或任何执行所述处理程序之后完成。该行作为文档ready
处理程序的一部分执行一次。
});
这是文档ready
处理程序的结尾。