2010-03-15 30 views
86

Tôi muốn bắt một sự kiện nhấp chuột với jQuery và có thể biết liệu một phím đã được nhấn cùng một lúc sao cho tôi có thể ngã ba trong chức năng gọi lại dựa trên sự kiện nhấn phím.Làm cách nào để kiểm tra xem liệu một phím có được nhấn trong sự kiện nhấp chuột với jQuery không?

Ví dụ:

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

Đây có phải là có thể ở tất cả hoặc làm thế nào nó có thể được thực hiện nếu nó là có thể?

Trả lời

42

Bạn cần phải theo dõi riêng tình trạng chính sử dụng 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; 
    } 
}); 

Xem list of key codes. Bây giờ bạn có thể kiểm tra xem:

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

Một xuống bên của phương pháp này (không phải là tôi biết một cách tốt hơn) là nếu bạn đang khám phá ra phím ALT, và người sử dụng ALT-Tabs để một cửa sổ khác, khi đó sự kiện khóa không được trình duyệt phát hiện vì nó xảy ra trên một ứng dụng khác. Từ thời điểm đó, jquery nghĩ rằng phím là xuống, cho đến khi họ keyup trong ứng dụng jquery của bạn. Điều này chỉ quan trọng với phím ALT, theo như tôi có thể tưởng tượng. – Ben

+1

Đối với Mac OS X sẽ là Cmd-Tab, nhưng tôi nghĩ hiệu trưởng vẫn giữ – murftown

+0

Hoặc Ctrl + Tab để thay đổi tab của trình duyệt – Seeven

152

Bạn có thể dễ dàng phát hiện phím shift, alt và phím điều khiển từ thuộc tính sự kiện;

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

Xem quirksmode để xem thêm thuộc tính. Nếu bạn muốn phát hiện các phím khác, hãy xem cletus's answer.

+3

Tôi không thấy thuộc tính đó trên đối tượng Sự kiện jQuery: http: //api.jquery. com/category/events/event-object/ – cletus

+1

Vâng, như trang nói, "Hầu hết các thuộc tính từ sự kiện ban đầu được sao chép và chuẩn hóa cho đối tượng sự kiện mới." ctrlKey, altKey vv là một phần của tiêu chuẩn ecmascript (xem liên kết đầu tiên trên trang jquery api đã nói ở trên), vì vậy (ít nhất là trong các trình duyệt phong nha) đối tượng sự kiện thường cũng có các thuộc tính đó được thiết lập. – kkyy

+3

Chế độ Quirks chỉ cho biết những điều này được xác định * trong * một sự kiện quan trọng .. không đề cập đến sự kiện chuột. –

4

tôi đã có thể sử dụng nó với Javascript mình

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

    function Show(event) { 
      if (event.ctrlKey) { 
       alert('Ctrl down'); 
      } 
    } 
Các vấn đề liên quan