it-swarm-eu.dev

Nejlepší cross-browser metoda pro zachycení CTRL + S s JQuery?

Moji uživatelé by chtěli zasáhnout Ctrl+S uložit formulář. Existuje dobrý způsob průzkumu mezi jednotlivými prohlížeči Ctrl+S kombinace kláves a odeslat můj formulář?

App je postaven na Drupalu, takže jQuery je k dispozici.

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

Klíčové kódy se mohou mezi prohlížeči lišit, takže budete muset zkontrolovat více než 115.

116
Jim

To funguje pro mě (pomocí jquery) k přetížení Ctrl+SCtrl+F a 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

Můžete použít knihovnu zkrácenou knihovnu pro manipulaci se specifickým prohlížečem.

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

Toto řešení jQuery pracuje pro mě v Chrome a Firefoxu Ctrl+S a 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

Tenhle pro mě pracoval v Chromu ... Z nějakého důvodu event.which vrací velké S (83) pro mě, nevíte proč (bez ohledu na stav uzamčení kapitol), takže jsem použil fromCharCode a toLowerCase jen aby byl zapnutý bezpečnosti

$(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;
});

Pokud někdo ví, proč dostávám 83 a ne 115 , budu ráda slyšet, i když to někdo testuje v jiných prohlížečích.

24
Eran Medan

Kombinoval jsem několik možností, jak podporovat FireFox, IE a Chrome. Také jsem ji aktualizoval, aby lépe podporoval mac

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

Chtěl bych, aby webové aplikace nepřesáhly mé výchozí klávesové zkratky, upřímně. Ctrl+S už něco dělá v prohlížečích. Mít tuto změnu náhle v závislosti na místě, které jsem prohlížel, je rušivé a frustrující, nemluvě o často buggy. Měl jsem stránky Hijack Ctrl+Tab protože to vypadalo stejně jako Ctrl+I, jak zničit mou práci na webu a zabránit mi v přepínání karet jako obvykle.

Pokud chcete použít klávesové zkratky, použijte atribut accesskey. Nezrušujte prosím stávající funkce prohlížeče.

5
Eevee

@Eevee: Vzhledem k tomu, že se prohlížeč stává domovem pro bohatší a bohatší funkce a začíná nahrazovat aplikace pro stolní počítače, nebude to prostě možnost vzdát se použití klávesových zkratek. Bohatá a intuitivní sada klávesových příkazů Gmailu byla důležitá pro mou ochotu opustit aplikaci Outlook. Klávesové zkratky v Todoist, Google Reader a Kalendáři Google mi každodenně usnadňují život.

Vývojáři by měli být rozhodně opatrní, aby nenahradili stisknutí kláves, které již mají v prohlížeči význam. Například textové pole WMD píšu do nevysvětlitelných interpretů Ctrl+Del jako "Blockquote" spíše než "delete Word forward". Zajímalo by mě, jestli je tam někde standardní seznam "prohlížeč-bezpečné" zkratky, které mohou vývojáři stránek používat a že prohlížeče budou zavázány, že se budou držet dál od budoucích verzí.

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.

Toto je aktuální verze odpovědi uživatele @ AlanBellows, která nahrazuje which s key. Funguje to i v případě, že se jedná o závadu na hlavním klíči Chrome (kde stisknete tlačítko Ctrl+S posílá kapitál S místo s). Pracuje ve všech moderních prohlížečích.

3
IamGuest

Mám rád tento malý plugin . Potřebuje však trochu větší průchodnost prohlížeče.

1
misteraidan

To by mělo fungovat (přizpůsobeno 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;
    }
}); 
0
pelms

Odpověď Alan Bellows:! (E.altKey) přidána pro uživatele, kteří používají AltGr při psaní (např. Polsko). Bez tohoto stisknutí AltGr+S bude dávat stejný výsledek jako 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

Tento plugin vytvořený mnou může být užitečný.

Plugin

Můžete použít tento plugin musíte zadat klíčové kódy a funkce, které mají být spuštěny takhle

simulatorControl([17,83], function(){
 console.log('You have pressed Ctrl+Z');
});

V kódu jsem zobrazil, jak provést Ctrl+S. Na této stránce získáte podrobnou dokumentaci. Plugin je v sekci JavaScript Code of My Pen na Codepen.

0
Dhruv Singhal

Toto bylo mé řešení, které je mnohem snazší číst než jiné návrhy zde, můžete snadno zahrnout další kombinace kláves, a bylo testováno na IE, Chrome a Firefoxu:

$(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

příklad:

shortcut.add("Ctrl+c",function() {
    alert('Ok...');
}
,{
    'type':'keydown',
    'propagate':false,
    'target':document
});

používání

<script type="text/javascript" src="js/shortcut.js"></script>

odkaz ke stažení: http://www.openjs.com/scripts/events/keyboard_shortcuts/#

0
André

Vyřešil jsem svůj problém naIE, pomocí alert("With a message"), aby se zabránilo výchozímu chování:

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