2014-04-15 66 views
1

我試過event.preventDefaultevent.stopPropagation,並從事件處理程序返回false。防止瀏覽器中按鍵的默認動作

沒有什麼可以幫助阻止瀏覽器中某些鍵的行爲。

比如我想使用Page Down鍵的Page Up記錄(下一首,上)在AngularJS應用程序,獲取一個或下一個記錄之間進行導航。它工作正常。但它並不妨礙瀏覽器在Page 012下載Page Up上執行默認操作。例如,按住select(下拉)元素的同時將改變下拉列表的選擇,然後移動到下一個記錄。對於很多其他有用的鍵無法覆蓋的情況,實際上也是如此:主頁結束(如果關注它,將使選擇下拉更改爲第一個或最後一個選擇)。

這裏是我當前的代碼:

$document.bind('keyup', function(e) { 
    switch (e.keyCode) { 
     case 109: 
      if (e.altKey) { 
       $scope.gotoPrev(e); 
       e.preventDefault(); 
       e.stopPropagation(); 
       window.scrollTo(0, 0); 
       return false; 
      } 
      break; 
     case 107: .... 

正如你看到我目前使用其他鍵(Alt鍵+Alt鍵-等),而不是Page Down鍵Page Up。但我想用這些。

另一個相關的問題是,如何防止tab鍵跳轉到url區域。我希望它只循環頁面上的字段,而不是跳出他的頁面並進入URL區域。

+0

e.stopImmediatePropagation? – steven

+0

不,這是因爲默認操作在按鍵之前觸發,在按鍵之前。正如在下面的答案中提出的,我將dit更改爲keydown,現在我可以取消默認操作。 –

回答

1

使用「的keydown」,而不是「KEYUP」當用戶釋放的關鍵,在已經執行該鍵的默認操作後

keyup火災。 (http://www.quirksmode.org/dom/events/keys.html

+0

我試過了,不起作用。建議您在jsfiddle或plunker中自己試試。 –

+0

你是對的!它工作。 –