2010-09-09 70 views
35

Tôi muốn thêm hỗ trợ cho các phím tắt vào một vài trang trong ứng dụng web của tôi bằng cách chặn trình xử lý sự kiện nhấn phím của đối tượng tài liệu chứ không phải thuộc tính khóa truy cập.Ghi đè Phím tắt của Trình duyệt

Vấn đề là mọi trình duyệt đều có tổ hợp bàn phím riêng, vì vậy không thể đưa ra một tập hợp các kết hợp bàn phím hoạt động trên tất cả các trình duyệt web nhưng vẫn nhất quán. là Ctrl + phím Shift + S trong khi một cho xóa là Alt + D.)

vì vậy, tôi figured nó sẽ chỉ đơn giản để ghi đè lên phím tắt trình duyệt hoàn toàn trong một vài trang với tôi .

Tất cả các nhược điểm sang một bên, là nó có thể? Nếu vậy, làm thế nào để bạn làm điều đó?

+2

Lưu ý cá nhân, vui lòng tránh ghi đè các phím tắt chung cho trình duyệt nhất quán giữa các trình duyệt như 'Cw',' Ct', 'CSt' ... Một số sản phẩm của Google ghi đè các phím tắt phổ biến và cực kỳ khó chịu ! –

+1

Có thể khó biết các phím tắt người dùng "phổ biến" là gì. Ví dụ: nhiều người dùng có sử dụng 'C-e' hoặc nó có tương đối tốt để ghi đè không? Thật tuyệt vời khi có một biểu đồ phần trăm người dùng sử dụng từng lối tắt của trình duyệt. – JKillian

Trả lời

12

Có một bảo hiểm tuyệt vời này ở đây: http://unixpapa.com/js/key.html

Đối với cho dù đây là cái gì đó nên được thực hiện, khá một vài phím stackoverflow của biên tập câu hỏi ghi đè mà không gây ảnh hưởng quá nhiều (di chuột qua các nút trên thanh công cụ) .

+3

Bạn cần xử lý sự kiện * keydown * với 'e.preventDefault(); e.stopPropagation(); '. Trong khi xử lý keydown một điều cần nhớ là nó có thể xảy ra nhiều lần nếu người dùng giữ phím ép lâu hơn một chút. – ShitalShah

+7

Bạn nên trả lời câu hỏi trực tiếp trên Stack Overflow, không liên kết ở đâu đó khác (liên kết bên ngoài có thể phá vỡ hoặc thay đổi hoặc không trả lời trực tiếp câu hỏi). Xem [Câu trả lời chỉ chứa các liên kết ở nơi khác thực sự là "câu trả lời hay"?] (Http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers). – mgiuca

+0

Tôi thực sự ghét cách Ctrl-L bị đánh cắp khi tôi đang sử dụng trình soạn thảo câu hỏi của StackOverflow. Làm cho việc tìm kiếm trên web trở nên khó khăn hơn trong khi chỉnh sửa câu hỏi. –

29
onkeydown = function(e){ 
    if(e.ctrlKey && e.keyCode == 'S'.charCodeAt(0)){ 
    e.preventDefault(); 
    //your saving code 
    } 
} 
+5

Trong nhiều tình huống, tôi không nghĩ rằng điều đó có hiệu quả. Với các phím như 'tab', rất nhiều trình duyệt sẽ chặn lệnh trước khi tập lệnh có thể thay đổi hành vi của khóa một cách chính xác. – Trafalmadorian

+4

'event.preventDefault' chỉ hoạt động (khi có) trên trình duyệt tương thích W3C, không phải (nói) trình duyệt thống trị trên web chung, Microsoft - trừ khi, tất nhiên, bạn đang sử dụng một thư viện như jQuery để thêm nó vào cho bạn. –

+3

T.J.> Bạn có nghĩa là jQuery có thể ghi đè lên phím tắt ngay cả trên IE? –

8

Đây là giải pháp của tôi cho vấn đề này:

Hầu hết (nếu không phải tất cả) phím tắt của trình duyệt sẽ bị ghi đè. Chỉ những hệ thống duy nhất, chẳng hạn như Alt + Tab hoặc Windows phím sẽ không.

document.onkeydown = overrideKeyboardEvent; 
document.onkeyup = overrideKeyboardEvent; 
var keyIsDown = {}; 

function overrideKeyboardEvent(e){ 
    switch(e.type){ 
    case "keydown": 
     if(!keyIsDown[e.keyCode]){ 
     keyIsDown[e.keyCode] = true; 
     // do key down stuff here 
     } 
    break; 
    case "keyup": 
     delete(keyIsDown[e.keyCode]); 
     // do key up stuff here 
    break; 
    } 
    disabledEventPropagation(e); 
    e.preventDefault(); 
    return false; 
} 
function disabledEventPropagation(e){ 
    if(e){ 
    if(e.stopPropagation){ 
     e.stopPropagation(); 
    } else if(window.event){ 
     window.event.cancelBubble = true; 
    } 
    } 
} 
+4

Điều này không dừng ALT + E từ trình đơn chỉnh sửa trình duyệt. –

Các vấn đề liên quan