it-swarm-tr.com

JQuery ile CTRL + S yakalamak için en iyi tarayıcılar yöntemi?

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.

151
ceejayoz
$(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.

116
Jim

Bu benim için çalışıyor (jquery kullanarak) aşırı yüklenmek için Ctrl+SCtrl+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;
        }
    }
});
231
Danny Ruijters

Tarayıcıya özgü şeyleri işlemek için kısayol kitaplığı kullanabilirsiniz.

shortcut.add("Ctrl+S",function() {
    alert("Hi there!");
});
32
EndangeredMassa

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;
}); 
27
Alan Bellows

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

24
Eran Medan

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;
     }
});
6
uadrive

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.

5
Eevee

@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.

4
Herb Caudill
$(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.

3
IamGuest

Bu küçük eklenti 'i seviyorum. Gerçi biraz daha çapraz tarayıcı dostu olması gerekiyor.

1
misteraidan

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;
    }
}); 
0
pelms

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; });
0
Jaś Fasola

Benim tarafımdan yapılan bu eklenti yardımcı olabilir.

eklenti

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.

0
Dhruv Singhal

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;
});
0
R. Salisbury

ö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/#

0
André

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;
        }
    }
});
0
user2570311