“嗨”只会发出一次警告,因为它不在处理程序中......它在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()
,因为它可以更好的描述,它的无阻塞。
UPDATE
我可以从下面的评论你,什么在你的代码实际发生相当混乱看看......所以,让我们通过它一步。
$(document).ready(function(){
在这里,您绑定了一个处理程序到DOM ready
事件。当浏览器完成构建文档结构时,这会被触发。它没有考虑到需要加载的任何外部资产。
$(document).bind('keydown', function(e){
现在我们将一个处理程序绑定到事件。当事件冒泡达到document
级别时,该函数内的任何内容(以及中只有内的函数)将被执行。
key = e.keyCode;
您分配事件的一个key
变量keyCode
财产。我建议使用关键字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
变量匹配您的条件之一。
});
这是处理器的END。
alert("Hi");
在这里,你alert()
消息。这是在处理程序被绑定之后直接完成的,但不是在每个处理程序或任何处理程序执行之后。此行作为文件ready
处理程序的一部分执行一次。
});
这是文件末尾的ready
句柄。
为什么你期望它不止一次提醒?当DOM准备就绪时,它会提醒一次,就是这样。它与keydown事件无关。 – elclanrs 2013-02-21 04:18:05
我不明白你的问题。 'break'和'return'都是有效的javascript命令。 – Barney 2013-02-21 04:18:24
你想做什么? “hi”警告一次,因为'$(document).ready()'在文档dom被加载并准备好时触发一次。也许你想把警报放在'keydown'事件处理程序中? – deadlock 2013-02-21 04:21:08