2012-11-05 67 views
0

因此,我有一個Keydown組合在我的窗體部分中的div之間移動,但是在第一次使用組合後,我只能按下ALT鍵(Keycode 18),它在函數中運行兩個if語句,因此兩次調用其他函數。javascript keydown組合在第一次使用後用一個按鍵激活

在輸入if之前應該檢查第二個keydown事件,或者至少這是我相信的。

是否有一些我需要做的keydown的清除命令,或者重置keydown事件的偵聽方式?

var keys = []; 

document.onkeydown = function(evt){  
    var key = evt.keyCode; 
    keys[key] = true; 
    if(keys[18] && keys[78]){ 
     NewFocus('#Notes'); 
     console.log("Notes"); 
    } 
    if(keys[18] && keys[67]){ 
     NewFocus('#Callers'); 
     console.log("Callers"); 
    } 

    return false; 
} 

function NewFocus(newNav) 
    { 
     $('.navActive').hide().removeClass('navActive'); 
      console.log("made it to New Focus event."); 
     var id = $(newNav); 
      console.log("This is the id " + $(id)); 
     $(id).show().addClass('navActive'); 

     return false;; 
    } 

順便說一句,我在Safari和Chrome中運行它,你可以看到剛剛看到控制檯發生了什麼。

我一定錯過了一些東西,但不知道是什麼。

回答

1

你需要清除keys陣列按鍵被釋放時:

document.onkeyup = function (evt) { 
    var key = evt.keyCode; 
    keys[key] = false; 
}; 
+0

這工作完美。謝謝。 –

4

您需要傾聽onkeyup並使用delete keys[key]清除該密鑰的狀態。

+0

我要去嘗試你的建議,後來與jbabey的功能,看看會發生什麼混合。 –

相關問題