Yanıtlar:
$(window).keypress(function(event) {
if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true;
alert("Ctrl-S pressed");
event.preventDefault();
return false;
});
Anahtar kodları tarayıcılar arasında farklılık gösterebilir, bu nedenle 115'den fazla olup olmadığını kontrol etmeniz gerekebilir.
keydownyerine kullanmakkeypress
Bana (kullanarak jquery) için aşırı yük için bu eserler Ctrl+ S, Ctrl+ Fve 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 iforijinal ifdeyim zaten doğru olarak değerlendirileceğinden bir çalışmaz. Kodunuzu orijinal ififadeden önce, orijinali bir else if.
Tarayıcıya özgü şeyleri işlemek için bir kısayol kütüphanesi kullanabilirsiniz .
shortcut.add("Ctrl+S",function() {
alert("Hi there!");
});
Bu jQuery çözüm her ikisi için, Chrome ve Firefox'ta benim için çalışıyor Ctrl+ Sve 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.keybunun yerine kullanın e.which;
Bu benim için Chrome'da çalıştı ... bazı nedenlerden dolayı benim için event.whichbüyük bir S (83) döndürüyor, neden olduğundan emin değilim (büyük harf kilidi durumuna bakılmaksızın) bu yüzden kullandım fromCharCodeve toLowerCasesadece güvenli tarafta olmak
$(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;
});
Biri neden 115 değil 83 aldığımı bilirse , duymaktan memnuniyet duyarım, eğer birisi bunu diğer tarayıcılarda test ederse, işe yarayıp yaramadığını duymaktan mutluluk duyarım
FireFox, IE ve Chrome'u desteklemek için birkaç seçeneği birleştirdim. Mac'i daha iyi desteklemek için de güncelledim
// 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;
}
});
Web uygulamalarının varsayılan kısayol tuşlarımı dürüstçe geçersiz kılmamasını istiyorum. Ctrl+ Starayıcılarda zaten bir şey yapıyor. Görüntülediğim siteye bağlı olarak bu değişikliği aniden bozmak, sıkıcı ve sinir bozucu, sık sık buggy bahsetmiyorum. Ben siteleri kaçırmak yaşadım Ctrl+ Tabo da aynı görünüyordu çünkü Ctrl+ Ihem sitede çalışmalarımı mahvediyor ve her zamanki gibi sekmeleri anahtarlama beni engelleyen.
Kısayol tuşları istiyorsanız, accesskeyözelliği kullanın . Lütfen mevcut tarayıcı işlevlerini bozmayın.
@Eevee: Tarayıcı daha zengin ve daha zengin işlevsellik için bir yer haline geldikçe ve masaüstü uygulamalarının yerini almaya başladığında, klavye kısayollarının kullanılmasını bırakmak için bir seçenek olmayacak. Gmail'in zengin ve sezgisel klavye komutları kümesi, Outlook'u terk etme isteğimde etkili oldu. Todoist, Google Reader ve Google Takvim'deki klavye kısayolları hayatımı günlük olarak çok daha kolay hale getiriyor.
Geliştiriciler, tarayıcıda zaten bir anlamı olan tuş vuruşlarını geçersiz kılmamaya kesinlikle dikkat etmelidir. Örneğin, içine yazdığım WMD metin kutusu, Ctrl+ Delkelimesini "ileriye doğru sil" yerine "Blockquote" olarak yorumluyor . Site geliştiricilerinin kullanabileceği ve tarayıcıların gelecekteki sürümlerde uzak durmayı taahhüt edeceği "tarayıcı açısından güvenli" kısayolların bir yerinde standart bir liste olup olmadığını merak ediyorum.
$(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.
Bu, @ AlanBellows'un cevabının yerini whichalan güncel bir sürümüdür key. Ayrıca Chrome'un büyük anahtar hatasıyla bile çalışır ( Ctrl+ tuşuna basarsanız Ss yerine büyük S harfi gönderir). Tüm modern tarayıcılarda çalışır.
Bu, diğer önerilerden daha kolay okunabilen, kolayca diğer anahtar kombinasyonlarını içerebilen ve IE, Chrome ve Firefox'ta test edilmiş olan benim çözümümdü:
$(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. Bununla birlikte, Mac'lerde bir kontrol anahtarı yoktur. Komut tuşunu ile test edin evt.metaKey. trueMac'te Cmd ve Windows'ta Win için geri döner .
Bu küçük eklentiyi seviyorum . Gerçi biraz daha çapraz tarayıcı dostu gerekir.
Bu işe yaramalıdır ( https://stackoverflow.com/a/8285722/388902 adresinden uyarlanmıştır ).
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;
}
});
misal:
shortcut.add("Ctrl+c",function() {
alert('Ok...');
}
,{
'type':'keydown',
'propagate':false,
'target':document
});
kullanım
<script type="text/javascript" src="js/shortcut.js"></script>
indirme bağlantısı: http://www.openjs.com/scripts/events/keyboard_shortcuts/#
Alan Bellows'a cevap:! (E.altKey) AltGryazarken kullanan kullanıcılar için eklendi (örneğin Polonya). Bu basmadan AltGr+ Saynı sonucu verecektir 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; });
Benim tarafımdan yapılan bu eklenti yardımcı olabilir.
Bu eklentiyi, bu şekilde çalıştırılacak anahtar Kodları ve işlevi sağlamanız gerekir
simulatorControl([17,83], function(){
console.log('You have pressed Ctrl+Z');
});
Kodda ben Ctrl+ için nasıl performans gösterdik S. Bağlantıda Ayrıntılı Belgeler alacaksınız. Eklenti, JavaScript kod bölümünde Codepen üzerindeki Kalemim bölümünde.
IE'de sorunumu çözdüm ve alert("With a message")varsayılan Davranışı önlemek için:
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;
}
}
});