「嗨」只會發出一次警告,因爲它不在處理程序中......它在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