2012-02-21 114 views
31

我在这里看到一些类似的问题(如JavaScript: Check if CTRL button was pressed),但我的问题实际上是事件触发。我的js代码:javascript - 检测按键或按下按键,按键事件不会触发

// Listen to keyboard. 
    window.onkeypress = listenToTheKey; 
    window.onkeyup = listenToKeyUp; 

    /* 
     Gets the key pressed and send a request to the associated function 
     @input key 
    */ 
    function listenToTheKey(e) 
    { 
     if (editFlag == 0) 
     { 
      // If delete key is pressed calls delete 
      if (e.keyCode == 46) 
       deleteNode(); 

      // If insert key is pressed calls add blank 
      if (e.keyCode == 45) 
       createBlank(); 

      if (e.keyCode == 17) 
       ctrlFlag = 1; 
     } 
    } 

事件引发了除CTRL任何其他键。
我还需要触发它为ctrl
我不能使用jQuery/prototype/whatever,所以这些解决方案是不可接受的。

所以...我怎么能检测到ctrl

+1

不是这样的:if(e.ctrlKey){....} work ..? – 2012-02-21 09:26:01

回答

15

你的事件有一个名为ctrlKey属性。你可以检查这个看看是否按下了键。请参阅下面的代码片段,以获得更多控制权,如按键

function detectspecialkeys(e){ 
    var evtobj=window.event? event : e 
    if (evtobj.altKey || evtobj.ctrlKey || evtobj.shiftKey) 
     alert("you pressed one of the 'Alt', 'Ctrl', or 'Shift' keys") 
} 
document.onkeypress=detectspecialkeys 
7

使用onkeydown而不是onkeypress可能会有所帮助。

http://www.w3schools.com/jsref/event_onkeypress.asp

注:onkeypress事件事件不会解雇所有键(例如ALT,CTRL,SHIFT ,ESC)在所有浏览器。要仅检测用户是否按下了某个键,请使用onkeydown事件,因为它适用于所有键的 。