Câu trả lời:
$(window).keypress(function(event) {
if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true;
alert("Ctrl-S pressed");
event.preventDefault();
return false;
});
Mã khóa có thể khác nhau giữa các trình duyệt, vì vậy bạn có thể cần kiểm tra nhiều hơn chỉ 115.
keydown
thay vì keypress
trong chrome
Điều này hoạt động với tôi (sử dụng jquery) để quá tải Ctrl+ S, Ctrl+ Fvà Ctrl+ G:
$(window).bind('keydown', function(event) {
if (event.ctrlKey || event.metaKey) {
switch (String.fromCharCode(event.which).toLowerCase()) {
case 's':
event.preventDefault();
alert('ctrl-s');
break;
case 'f':
event.preventDefault();
alert('ctrl-f');
break;
case 'g':
event.preventDefault();
alert('ctrl-g');
break;
}
}
});
else if
sẽ không hoạt động vì if
tuyên bố ban đầu sẽ được đánh giá là đúng. Bạn sẽ phải đặt mã của mình trước if
câu lệnh gốc , biến bản gốc thành một else if
.
Bạn có thể sử dụng một thư viện phím tắt để xử lý các công cụ cụ thể của trình duyệt.
shortcut.add("Ctrl+S",function() {
alert("Hi there!");
});
Giải pháp jQuery này hoạt động với tôi trong Chrome và Firefox, cho cả Ctrl+ Svà Cmd+ S.
$(document).keydown(function(e) {
var key = undefined;
var possible = [ e.key, e.keyIdentifier, e.keyCode, e.which ];
while (key === undefined && possible.length > 0)
{
key = possible.pop();
}
if (key && (key == '115' || key == '83' ) && (e.ctrlKey || e.metaKey) && !(e.altKey))
{
e.preventDefault();
alert("Ctrl-s pressed");
return false;
}
return true;
});
e.key
thay vì e.which
;
Cái này hoạt động với tôi trên Chrome ... vì một số lý do event.which
trả lại vốn S (83) cho tôi, không hiểu tại sao (bất kể trạng thái khóa mũ) vì vậy tôi đã sử dụng fromCharCode
và toLowerCase
chỉ để ở bên an toàn
$(document).keydown(function(event) {
//19 for Mac Command+S
if (!( String.fromCharCode(event.which).toLowerCase() == 's' && event.ctrlKey) && !(event.which == 19)) return true;
alert("Ctrl-s pressed");
event.preventDefault();
return false;
});
Nếu bất cứ ai biết lý do tại sao tôi nhận được 83 chứ không phải 115 , tôi sẽ rất vui khi biết, nếu có ai kiểm tra điều này trên các trình duyệt khác, tôi sẽ rất vui khi biết nó có hoạt động hay không
Tôi đã kết hợp một vài tùy chọn để hỗ trợ FireFox, IE và Chrome. Tôi cũng đã cập nhật nó để hỗ trợ mac tốt hơn
// simply disables save event for chrome
$(window).keypress(function (event) {
if (!(event.which == 115 && (navigator.platform.match("Mac") ? event.metaKey : event.ctrlKey)) && !(event.which == 19)) return true;
event.preventDefault();
return false;
});
// used to process the cmd+s and ctrl+s events
$(document).keydown(function (event) {
if (event.which == 83 && (navigator.platform.match("Mac") ? event.metaKey : event.ctrlKey)) {
event.preventDefault();
save(event);
return false;
}
});
Thành thật, tôi muốn các ứng dụng web không ghi đè các phím tắt mặc định của tôi. Ctrl+ Sđã làm một cái gì đó trong trình duyệt. Có sự thay đổi đột ngột tùy thuộc vào trang web tôi đang xem là gây rối và bực bội, chưa kể thường là lỗi. Tôi đã bị tấn công trang web Ctrl+ Tabvì nó trông giống như Ctrl+ I, cả hai đều phá hỏng công việc của tôi trên trang web và ngăn tôi chuyển đổi các tab như bình thường.
Nếu bạn muốn các phím tắt, sử dụng accesskey
thuộc tính. Vui lòng không phá vỡ chức năng trình duyệt hiện có.
@Eevee: Khi trình duyệt trở thành ngôi nhà cho chức năng ngày càng phong phú hơn và bắt đầu thay thế các ứng dụng trên máy tính để bàn, nó sẽ không phải là một lựa chọn để từ bỏ việc sử dụng các phím tắt. Bộ lệnh bàn phím phong phú và trực quan của Gmail là công cụ giúp tôi từ bỏ Outlook. Các phím tắt trong Todoist, Google Reader và Google Lịch đều giúp cuộc sống của tôi dễ dàng hơn nhiều, hàng ngày.
Các nhà phát triển chắc chắn nên cẩn thận không ghi đè các tổ hợp phím đã có ý nghĩa trong trình duyệt. Ví dụ: hộp văn bản WMD tôi đang nhập vào phiên dịch không thể giải thích Ctrl+ Dellà "Blockquote" thay vì "xóa từ chuyển tiếp". Tôi tò mò liệu có một danh sách tiêu chuẩn nào đó ở đâu đó về các phím tắt "an toàn cho trình duyệt" mà các nhà phát triển trang web có thể sử dụng và các trình duyệt sẽ cam kết tránh xa các phiên bản trong tương lai.
$(document).keydown(function(e) {
if ((e.key == 's' || e.key == 'S' ) && (e.ctrlKey || e.metaKey))
{
e.preventDefault();
alert("Ctrl-s pressed");
return false;
}
return true;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Try pressing ctrl+s somewhere.
Đây là phiên bản cập nhật của câu trả lời của @ AlanBellows, thay thế which
bằng key
. Nó cũng hoạt động ngay cả với trục trặc khóa vốn của Chrome (trong đó nếu bạn nhấn Ctrl+ Snó sẽ gửi vốn S thay vì s). Hoạt động trong tất cả các trình duyệt hiện đại.
Đây là giải pháp của tôi, dễ đọc hơn nhiều so với các đề xuất khác ở đây, có thể dễ dàng bao gồm các kết hợp phím khác và đã được thử nghiệm trên IE, Chrome và Firefox:
$(window).keydown(function(evt) {
var key = String.fromCharCode(evt.keyCode);
//ctrl+s
if (key.toLowerCase() === "s" && evt.ctrlKey) {
fnToRun();
evt.preventDefault(true);
return false;
}
return true;
});
String.fromCharCode
. Mặc dù, máy Mac không có khóa điều khiển. Kiểm tra phím lệnh với evt.metaKey
. Nó trả về true
cho Cmd trên Mac và Win trên Windows.
Tôi thích plugin nhỏ này . Nó cần một chút thân thiện với trình duyệt hơn.
Điều này sẽ hoạt động (được điều chỉnh từ https://stackoverflow.com/a/8285722/388902 ).
var ctrl_down = false;
var ctrl_key = 17;
var s_key = 83;
$(document).keydown(function(e) {
if (e.keyCode == ctrl_key) ctrl_down = true;
}).keyup(function(e) {
if (e.keyCode == ctrl_key) ctrl_down = false;
});
$(document).keydown(function(e) {
if (ctrl_down && (e.keyCode == s_key)) {
alert('Ctrl-s pressed');
// Your code
return false;
}
});
thí dụ:
shortcut.add("Ctrl+c",function() {
alert('Ok...');
}
,{
'type':'keydown',
'propagate':false,
'target':document
});
sử dụng
<script type="text/javascript" src="js/shortcut.js"></script>
liên kết để tải xuống: http://www.openjs.com/scripts/events/keyboard_shortype/#
Để Alan Bellows trả lời :! (E.altKey) được thêm cho người dùng sử dụng AltGrkhi nhập (ví dụ: Ba Lan). Nếu không nhấn AltGr+ Snày sẽ cho kết quả tương tự như Ctrl+S
$(document).keydown(function(e) {
if ((e.which == '115' || e.which == '83' ) && (e.ctrlKey || e.metaKey) && !(e.altKey))
{
e.preventDefault();
alert("Ctrl-s pressed");
return false;
}
return true; });
Plugin này được thực hiện bởi tôi có thể hữu ích.
Bạn có thể sử dụng plugin này, bạn phải cung cấp Mã và chức năng chính để được chạy như thế này
simulatorControl([17,83], function(){
console.log('You have pressed Ctrl+Z');
});
Trong mã tôi đã hiển thị cách thực hiện cho Ctrl+ S. Bạn sẽ nhận được Tài liệu chi tiết Trên liên kết. Plugin nằm trong phần Mã JavaScript của Bút của tôi trên Codepen.
Tôi đã giải quyết vấn đề của mình trên IE , sử dụng một alert("With a message")
để ngăn chặn Hành vi mặc định:
window.addEventListener("keydown", function (e) {
if(e.ctrlKey || e.metaKey){
e.preventDefault(); //Good browsers
if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) { //hack for ie
alert("Please, use the print button located on the top bar");
return;
}
}
});