2013-02-21 54 views
-1
$(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"); 
}); 

「嗨」只發出一次提醒,我如何在啓動後跳出$(document).bind?可能是像break;return;

+0

爲什麼你期望它不止一次提醒?當DOM準備就緒時,它會提醒一次,就是這樣。它與keydown事件無關。 – elclanrs 2013-02-21 04:18:05

+0

我不明白你的問題。 'break'和'return'都是有效的javascript命令。 – Barney 2013-02-21 04:18:24

+0

你想做什麼? 「hi」警告一次,因爲'$(document).ready()'在文檔dom被加載並準備好時觸發一次。也許你想把警報放在'keydown'事件處理程序中? – deadlock 2013-02-21 04:21:08

回答

6

「嗨」只會發出一次警告,因爲它不在​​處理程序中......它在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塊跳躍,並呼籲leftuprightdown功能,如果先前聲明key變量匹配您的條件之一。

}); 

這是​​處理器的END

alert("Hi"); 

在這裏,你alert()消息。這是在​​處理程序被綁定之後直接完成的,但不是在每個處理程序或任何處理程序執行之後。此行作爲文件ready處理程序的一部分執行一次。

}); 

這是文件末尾的ready句柄。

+0

好吧更正,所以即時通訊想知道如何擺脫keydown處理程序,因爲它循環遍歷檢查keydowns,但我想突破並再次進入警戒 – Caveman 2013-02-21 04:22:54

+2

@Caveman - 你是顯然困惑。 'keydown'不會_loop_,它會在每次按下_key_時執行_down_。文檔準備就緒後,您的當前代碼將執行**一次**。它將一個keydown函數綁定到文檔,但直到用戶按下某個鍵時纔會觸發此事件處理程序。你究竟想要做什麼? – jahroy 2013-02-21 04:24:36

+0

要繼續使用@jahroy所說的話,'keydown'處理程序只有在按下(並保持)鍵時纔會循環。 **僅處理程序中的**代碼被執行。 – ahren 2013-02-21 04:26:26

0

我想,你不想多次使用​​。

您可以使用onoff()一樣,

$(document).ready(function(){ 
    $(document).on('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(); 
     } 
     $(document).off('keydown'); 
    });// keydown handler ends here 
      alert("Hi"); 
}); 

或者你可以使用one()只觸發一次。

$(document).ready(function(){ 
     $(document).one('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"); 
    }); 
+0

已經有這種方法的時候是非感性的。 '.one()' – ahren 2013-02-21 04:39:49

+0

你應該等待編輯:)。可能是他想在一定條件下跑超過1次或「關閉」。 – Jashwant 2013-02-21 04:40:12