2010-03-15 41 views
86

我想用jQuery捕捉一個點擊事件,並能夠判斷是否同時按下了一個鍵,這樣我就可以在基於keypress事件的回調函數內進行分叉。如何在jQuery的點擊事件中檢查是否按下了某個鍵?

例如:

$("button").click(function() { 
    if([KEYPRESSED WHILE CLICKED]) { 
     // Do something... 
    } else { 
     // Do something different... 
    } 
}); 

這是不可能的或者是如何,如果有可能能不能做到?

回答

42

你需要使用keydown()keyup()分別跟蹤的關鍵地位:

var ctrlPressed = false; 
$(window).keydown(function(evt) { 
    if (evt.which == 17) { // ctrl 
    ctrlPressed = true; 
    } 
}).keyup(function(evt) { 
    if (evt.which == 17) { // ctrl 
    ctrlPressed = false; 
    } 
}); 

list of key codes。現在你可以檢查:

$("button").click(function() { 
    if (ctrlPressed) { 
    // do something 
    } else { 
    // do something else 
    } 
}); 
+5

一個使用JavaScript使用下來,這個方法的側(不,我知道一個更好的辦法)。如果您正在檢測ALT鍵,用戶ALT-選項卡另一個窗口,那麼瀏覽器不會檢測到鍵盤事件,因爲它發生在另一個應用程序上。從這一點來看,jquery認爲關鍵是關閉,直到他們在你的jQuery應用程序中關閉。 就我所能想象的,這隻與ALT鍵有關。 – Ben 2014-09-25 16:16:26

+1

對於Mac OS X,這將是Cmd-Tab,但我認爲校長仍然擁有 – murftown 2016-04-14 16:44:54

+0

或Ctrl + Tab用於更改瀏覽器的選項卡 – Seeven 2017-09-21 15:29:24

152

你可以很容易地檢測事件屬性的shift,alt和控制鍵;

$("button").click(function(evt) { 
    if (evt.ctrlKey) 
    alert('Ctrl down'); 
    if (evt.altKey) 
    alert('Alt down'); 
    // ... 
}); 

有關更多屬性,請參閱quirksmode。如果要檢測其他密鑰,請參閱cletus's answer

+3

我沒有在jQuery Event對象上看到該屬性:http://api.jquery。 com/category/events/event-object/ – cletus 2010-03-15 07:35:44

+1

那麼,就像頁面所說的那樣,「來自原始事件的大多數屬性都被複制並標準化爲新的事件對象。」 ctrlKey,altKey等是ecmascript標準的一部分(參見前面提到的jquery api頁面上的第一個鏈接),所以(至少在體面的瀏覽器中)事件對象通常也具有這些屬性設置。 – kkyy 2010-03-15 07:43:03

+3

怪癖模式只說這些是在一個關鍵事件中定義的*。沒有提及鼠標事件。 – 2012-09-14 23:39:18

4

我能獨自

<a href="" onclick="return Show(event)"></a> 

    function Show(event) { 
      if (event.ctrlKey) { 
       alert('Ctrl down'); 
      } 
    } 
相關問題