2010-10-10 19 views
56

Tôi đang cố gắng triển khai chức năng nhấn phím sẽ xóa một div khi người dùng truy cập Esc. Này làm việc cho Firefox & IE với đoạn mã sau:'Phím bấm' của jQuery không hoạt động đối với một số phím trong Chrome. Làm thế nào để làm việc xung quanh?

$("body").keypress(function(e) { 
    alert("any key pressed"); 
    if (e.keyCode == 27) { 
     alert("escape pressed"); 
    } 
}); 

Nếu tôi nhấn phím bất kỳ, các alert đầu tiên được hiển thị, và nếu tôi nhấn Escape, thứ hai alert cũng được hiển thị.

Tính năng này không hoạt động với Chrome. alert đầu tiên luôn được hiển thị nếu tôi nhấn bất kỳ phím chữ nào, nhưng không hiển thị khi tôi nhấn Escape, Tab, Space hoặc bất kỳ số nào.

Tại sao điều này là? Có cách nào để Chrome phản hồi những máy ép chính này không?

+0

Đây là [lỗi đã biết] (https://bugs.chromium.org/p/chromium/issues/detail?id=9061) của Chrome. Vào tháng 5 năm 2016, nhà phát triển đã tuyên bố rằng họ cho rằng hành vi của họ phù hợp với thông số kỹ thuật tốt hơn và [sẽ không khắc phục được] (https://bugs.chromium.org/p/chromium/issues/detail?id=9061#c15). – Sheepy

Trả lời

108

Thay vào đó, hãy thử xử lý keydown.

+4

bạn đã cứu tôi rất nhiều thời gian ..Cảm ơn SLaks – bragboy

+17

Bí quyết cho câu trả lời này, mà tôi nghĩ là rất quan trọng cần lưu ý, đó là "thử xử lý' keydown' "không phải là một giải pháp mục đích chung, nhưng cụ thể cho" một số phím ". Bạn vẫn cần 'nhấn phím 'để xử lý các ký tự ascii một cách chính xác. Vì vậy, nó thực sự là một quá trình đa bước (lộn xộn). – Kato

+0

Câu trả lời hay. Tôi đã có vấn đề này chính xác và điều này đã chăm sóc nó. –

16

sử dụng phím tắt . nhấn phím không hoạt động với ESC trong Chrome (không chắc chắn về các trình duyệt khác).

$(newTag).keydown(function(e) { //keypress did not work with ESC; 
    if (event.which == '13') { 
     ProfilePage.saveNewTag(search_id, $(newTag).val()); 
    } 
    else if (window.event.which){ 
     $(newTag).remove(); 
    } 
}); 
+1

Cảm ơn bạn đã đề cập đến lỗi Chrome. Nó sẽ hữu ích cho những người tự hỏi tại sao nhấn phím thực sự làm việc cho họ trong các trình duyệt khác. – Gustus

1

Sau khi cảnh báo thứ hai cũng

e.preventDefault(); 

Tiện ích này sẽ ngăn chặn các hành động mặc định của sự kiện được kích hoạt.

Thông tin thêm về phương pháp này here

Mã của bạn sẽ trông như thế

$("body").keypress(function(e) { 
    alert("any key pressed"); 
    if (e.keyCode == 27) { 
     alert("escape pressed"); 
     e.preventDefault(); 
}}); 
2

Đối phím ESC:

$(document).keydown(function(e) { 
    if(e.keyCode == 27) { /* Run code */ } 
} 

Đối với các phím chữ cái, như 'L':

$(document).keypress(function(e) { 
    if(e.which == 108) { } 
}); 

Hoạt động trong cả Chrome và Firefox

0

Sử dụng tập tin Jquery.hotkey js bạn có thể Hãy Sortcut chính

$(document).bind('keydown', 'esc', function(){ }); 
+0

Mặc dù đoạn mã này có thể giải quyết được câu hỏi, [bao gồm giải thích] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn. – DimaSan

0

bấm phím 'ESC'

e.which: 0 
e.keyCode: 27 

KeyUp 'ESC'

e.which: 27 
e.keyCode: 27 

Đối với các ký tự không thể in, sử dụng tốt hơn keyup.

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