Kullanıcılarım vurmak istiyor Ctrl+S Bir formu kaydetmek için Yakalamak için iyi bir çapraz tarayıcı yolu var mı Ctrl+S anahtar kombinasyonu ve formumu gönder
App Drupal üzerine inşa edilmiştir, bu yüzden jQuery mevcuttur.
$(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 yalnızca 115'ten fazla kontrol etmeniz gerekebilir.
Bu benim için çalışıyor (jquery kullanarak) aşırı yüklenmek için Ctrl+S, Ctrl+F ve 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;
}
}
});
Tarayıcıya özgü şeyleri işlemek için kısayol kitaplığı kullanabilirsiniz.
shortcut.add("Ctrl+S",function() {
alert("Hi there!");
});
Bu jQuery çözümü benim için hem Chrome'da hem de Firefox'ta çalışıyor. Ctrl+S ve 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;
});
Bu benim için Chrome'da işe yaradı ... Nedense event.which
benim için büyük bir S (83) döndürdü, neden (büyük harf kilidi durumuna bakılmaksızın) emin değilim, bu yüzden fromCharCode
ve toLowerCase
işlevini sadece güvende tutmak için kullandım yan
$(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;
});
Eğer birisi neden 83 aldığımı ve 115 alamadığımı anlarsa, duymaktan mutlu olacağım, bunu başka tarayıcılarda da sınanırsa, duyduğuma sevinirim
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ı geçersiz kılmamasını istiyorum. Ctrl+S zaten tarayıcılarda bir şeyler yapıyor. Baktığım siteye bağlı olarak bu değişikliğin aniden olması sık sık ve sıkıcı olmaktan ziyade yıkıcı ve sinir bozucu. Sitem vardı Hijack Ctrl+Tab çünkü aynı görünüyordu Ctrl+Ihem sitemdeki çalışmalarımı mahvediyor hem de her zamanki gibi sekmeleri değiştirmemi engelliyor.
Kısayol tuşları istiyorsanız, accesskey
niteliğini kullanın. Lütfen mevcut tarayıcı işlevselliğini bozmayın.
@Eevee: Tarayıcı daha zengin ve daha zengin işlevselliklere ev sahipliği yaptığı ve masaüstü uygulamalarını değiştirmeye başladığı için, klavye kısayollarını kullanmaktan vazgeçme seçeneği olmayacak. Gmail’in zengin ve sezgisel klavye komutları, Outlook’tan vazgeçme isteğimde etkili oldu. Todoist, Google Reader ve Google Takvim’deki klavye kısayollarının tümü hayatımı günlük olarak çok daha kolaylaştırıyor.
Geliştiriciler, tarayıcıda zaten bir anlamı olan tuş vuruşlarını geçersiz kılmamaya kesinlikle dikkat etmelidir. Örneğin, yazdığım WMD metin kutusu anlaşılmaz biçimde yorumluyor Ctrl+Del "ileri Word silmek" yerine "Blockquote" olarak. Site geliştiricilerinin kullanabileceği ve tarayıcıların gelecek sürümlerden uzak durmayı taahhüt ettiği "tarayıcıya güvenli" kısayolların standart bir listesi 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 yanıtının güncel bir sürümüdür, which
, key
ile değiştirilir. Ayrıca, Chrome'un büyük anahtar aksaklığıyla bile çalışır (nerede basarsanız) Ctrl+S s yerine S harfini gönderir. Tüm modern tarayıcılarda çalışır.
Bu küçük eklenti 'i seviyorum. Gerçi biraz daha çapraz tarayıcı dostu olması gerekiyor.
Bu çalışması gerekir ( https://stackoverflow.com/a/8285722/388902 arasında 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;
}
});
Alan Bellows adlı kişiye yanıt olarak:! (E.altKey) kullanan kullanıcılar için eklendi AltGr yazarken (örneğin, Polonya). Bu basmadan AltGr+S ile aynı sonucu verecek 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 kullanabilirsiniz, kod kodlarını ve bu şekilde çalıştırılacak işlevi sağlamanız gerekir.
simulatorControl([17,83], function(){
console.log('You have pressed Ctrl+Z');
});
Kodda nasıl bir performans göstereceğimi gösterdim. Ctrl+S. Bağlantıda Ayrıntılı Belgeler alacaksınız. Eklenti, Codepen'deki Kalemimin JavaScript Kodu bölümündedir.
Bu, benim önerim, buradaki diğer önerilerden çok daha kolay olan, diğer anahtar kombinasyonları kolayca içerebilen ve IE, Chrome ve Firefox'ta test edilmiş olan çö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;
});
örnek:
shortcut.add("Ctrl+c",function() {
alert('Ok...');
}
,{
'type':'keydown',
'propagate':false,
'target':document
});
kullanım
<script type="text/javascript" src="js/shortcut.js"></script>
indirmek için link: http://www.openjs.com/scripts/events/keyboard_shortcuts/#
SorunumuYANIüzerinde çözdüm, varsayılan davranışı önlemek için bir alert("With a message")
kullanarak
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;
}
}
});