2012-07-16 40 views
12

Sử dụng một trong những ví dụ từ một câu hỏi trước tôi có:jquery bấm phím kiện cho cmd + s VÀ ctrl + s

$(window).keypress(function(event) { 
    if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true; 
    $("form input[name=save]").click(); 
    event.preventDefault(); 
    return false; 
}); 

là nó cũng có thể thay đổi điều này để làm việc cho chìa khóa cmd Mac?

Tôi đã thử (!(event.which == 115 && (event.cmdKey || event.ctrlKey)) && !(event.which == 19)) nhưng điều này không hiệu quả.

+1

thể trùng lặp của [? Làm thế nào tôi có thể chụp COMMAND + S trong jQuery] (http://stackoverflow.com/questions/ 5833325/how-can-i-capture-commands-in-jquery) ':)' –

+0

Các sự kiện chính khá không nhất quán giữa các trình duyệt và hệ điều hành. Chỉ cần viết một ví dụ nhỏ và kiểm tra các phím và công cụ sửa đổi nào được kích hoạt khi nhấn cmd + S. – Christoph

+0

Tôi không thể nói điều này chắc chắn nhưng theo nguyên tắc chung, tôi nghĩ bạn muốn tránh thay đổi hành vi mặc định của trình duyệt (ctrl + s/cmd + s === "Lưu trang thành") –

Trả lời

22

Sử dụng event.metaKey để phát hiện các lệnh chính

$(document).keypress(function(event) { 
    if (event.which == 115 && (event.ctrlKey||event.metaKey)|| (event.which == 19)) { 
     event.preventDefault(); 
     // do stuff 
     return false; 
    } 
    return true; 
}); 
+3

Dấu ngoặc đơn bị thiếu. Tôi đã cố gắng để chỉnh sửa điều này vì vậy nhưng nhận được lỗi: "Chỉnh sửa phải có ít nhất 6 ký tự; có cái gì khác để cải thiện trong bài đăng này?" nguệch ngoạc stackoverflow –

+6

tiếc là điều này không làm việc cho tôi trong chrome (Phiên bản 27.0.1453.110). nó luôn mở hộp thoại "lưu dưới dạng" ... - CTRL + S hoạt động trên mặt khác –

+0

Ngọt 'metaKey' – brasofilo

3

Đối với việc phát hiện ctrl+scmd+s, bạn có thể sử dụng theo cách này:

Working jsFiddle.

jQuery:

var isCtrl = false; 
$(document).keyup(function (e) { 
if(e.which == 17) isCtrl=false; 
}).keydown(function (e) { 
    if(e.which == 17) isCtrl=true; 
    if(e.which == 83 && isCtrl == true) { 
     alert('you pressed ctrl+s'); 
    return false; 
} 
}); 

source (includes all keyboard shorcuts and buttons)

+0

Tốt, bạn có thể giải thích tại sao đây là giải pháp tốt hơn câu trả lời khác? –

+0

Trên Macbook của tôi (Chrome và Safari) cmd + s không hoạt động cho đến khi bạn nhấn ctr + s. Sau đó cả hai công việc. Kỳ dị. –

+0

@ T.BrianJones điều tương tự cũng xảy ra với tôi trên các trình duyệt khác nhau. Tôi đoán chức năng 'save' của trình duyệt ngăn chức năng của chúng ta /: –

1

này làm việc cho tôi:

$(document).keypress(function(event) { 
    if ((event.which == 115 || event.which == 83) && (event.ctrlKey||event.metaKey)|| (event.which == 19)) { 
     event.preventDefault(); 
     // do stuff 
     return false; 
    } 
    return true; 
}); 
Các vấn đề liên quan