JQuery के साथ CTRL + S पर कब्जा करने के लिए सर्वश्रेष्ठ क्रॉस-ब्राउज़र विधि?


162

मेरे उपयोगकर्ता एक फॉर्म को बचाने के लिए Ctrl+ हिट करने में सक्षम होना चाहते हैं S। क्या Ctrl+ Sकुंजी संयोजन को कैप्चर करने और मेरा फ़ॉर्म सबमिट करने का एक अच्छा क्रॉस-ब्राउज़र तरीका है ?

ऐप Drupal पर बनाया गया है, इसलिए jQuery उपलब्ध है।

जवाबों:


121
$(window).keypress(function(event) {
    if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true;
    alert("Ctrl-S pressed");
    event.preventDefault();
    return false;
});

कुंजी कोड ब्राउज़रों के बीच भिन्न हो सकते हैं, इसलिए आपको केवल 115 से अधिक की जांच करने की आवश्यकता हो सकती है।


5
ओएस एक्स वेबकिट ब्राउज़र पर cmd + s 19 रिटर्न करता है, इसलिए यह उसके लिए भी जाँच योग्य है। अगर (((event.which == 115 && event.ctrlKey) &&! (event.which == 19)) सही है;
तदस

6
केवल मेरे लिए फ़ायरफ़ॉक्स में काम करता है। IE9 और Chrome किसी भी कीप को पंजीकृत नहीं करते हैं।
बजे १२:५२ पेले

7
यहां तक ​​कि $ (दस्तावेज़) .keypress ($ (विंडो) .keypress) के बजाय, IE और क्रोम अभी भी स्क्रिप्ट करने से पहले 'Ctrl' के साथ कीपर ईवेंट को पकड़ लेते हैं)।
pelms

16
क्रोम के keydownबजाय का उपयोग करेंkeypress
destan

3
दुर्भाग्य से यह तारीख से बाहर है
Cannicide

250

यह मेरे लिए काम करता है (अधिक उपयोग करने के लिए jquery) Ctrl+ S, Ctrl+ Fऔर 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;
        }
    }
});

8
यह एकमात्र ऐसा उत्तर है जिसने मेरे लिए परीक्षण किए गए सभी ब्राउज़रों में काम किया, जिनमें क्रोम संस्करण 28.0.1500.71
टी। ब्रायन जोन्स

27
शुद्ध JS के साथ यदि आप window.addEventListener(इसके बजाय उपयोग करते हैं$(window).bind(

2
@ नोट यदि आप अलर्ट हटाते हैं तो यह सेव डायलॉग को नहीं खोलता है। यह अलर्ट के कारण होता है। सभी ब्राउज़रों में मेरे लिए ठीक काम करता है। अच्छा काम है।
CrazyNooB

2
मेरे लिए काम किया। कृपया इस उत्तर को ऊपर वाले से स्वीकार करें।
pavanw3b

1
@Fireflight: else ifकाम नहीं करेगा क्योंकि मूल ifकथन पहले से ही सच के रूप में मूल्यांकन किया जाएगा। मूल ifकथन को मूल में बदलने से पहले आपको अपना कोड रखना होगा else if
डैनी Ruijters

34

आप ब्राउज़र विशिष्ट सामान को संभालने के लिए एक शॉर्टकट लाइब्रेरी का उपयोग कर सकते हैं ।

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

7
यह एक jQuery प्लगइन में परिवर्तित किया गया है, फोर्क और reforked, और अब 1.6.x का समर्थन करता है: github.com/ricardovaleriano/jquery.hotkeys
Félix Saparelli

12

29

यह jQuery समाधान मेरे लिए Chrome और Firefox में Ctrl+ Sऔर 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;
}); 

1
यह एकमात्र समाधान है जो यहां ठीक से काम कर रहा है। आपका बहुत बहुत धन्यवाद!
Stephan Weinhold

1
यह अब पुराना हो सकता है: e.keyइसके बजाय उपयोग करें e.which;
शाम

आधुनिक मानकों के लिए 14 मई 2017 को अपडेट किया गया।
एलन बेलोज़

28

यह मेरे लिए क्रोम पर काम करता है ... किसी कारण से मेरे लिए event.whichएक राजधानी एस (83) लौटाता है, यह सुनिश्चित नहीं है कि (कैप लॉक राज्य की परवाह किए बिना) इसलिए मैंने इस्तेमाल किया fromCharCodeऔर toLowerCaseबस सुरक्षित पक्ष पर होना चाहिए

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

अगर किसी को पता है कि मुझे 83 और 115 क्यों नहीं मिलते हैं , तो मुझे यह सुनकर खुशी होगी, अगर कोई अन्य ब्राउज़रों पर यह परीक्षण करता है तो मुझे यह सुनने में खुशी होगी कि यह काम करता है या नहीं


मुझे क्रोम के साथ यही समस्या है। कितना दर्द!
कोडीनिंजा

ps अब जब मैं इसे देखता हूं, तो मुझे लगता है कि preventDefault बेमानी है क्योंकि रिटर्न गलत है, इसे ट्रिगर करता है (और stopPropagation) लेकिन यह निश्चित नहीं है कि यह सवाल के लिए बहुत मायने रखता है
Eran Medan

7

मैंने फायरफॉक्स, आईई और क्रोम का समर्थन करने के लिए कुछ विकल्प संयुक्त किए। मैं भी इसे बेहतर समर्थन मैक के लिए अद्यतन किया है

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

5

मैं चाहूंगा कि वेब एप्लिकेशन ईमानदारी से, मेरी डिफ़ॉल्ट शॉर्टकट कुंजियों को ओवरराइड न करें। Ctrl+ Sपहले से ही ब्राउज़रों में कुछ करता है। जिस साइट पर मैं देख रहा हूं, उस पर निर्भर करते हुए अचानक परिवर्तन करना विघटनकारी और निराशाजनक है, अक्सर छोटी गाड़ी का उल्लेख नहीं करना। मेरे पास साइटें हाइजैक हैं Ctrl+ Tabक्योंकि यह वैसी ही दिखती थीCtrl + I, दोनों साइट पर मेरे काम को बर्बाद कर रहे हैं और मुझे हमेशा की तरह टैब स्विच करने से रोक रहे हैं।

यदि आप शॉर्टकट कुंजियाँ चाहते हैं, तो accesskeyविशेषता का उपयोग करें । कृपया मौजूदा ब्राउज़र कार्यक्षमता को न तोड़े।


2
मैं सहमत हूँ, पूरी तरह से, लेकिन दुर्भाग्य से मैं चपरासी लागू कर रहा हूं, निर्णय निर्माता नहीं।
सइयोजोज

24
सच है, लेकिन CTRL + S एक अक्सर इस्तेमाल की जाने वाली सुविधा नहीं है। मुझे संदेह है कि लोग इसे याद करेंगे, खासकर अगर इसका मतलब है कि आप अपनी फ़ाइल को अपने वेबएप में सहेज सकते हैं।
लुप्तप्राय

13
मैं आम तौर पर आपके साथ सहमत हूं, लेकिन केवल एक बार जब मैं किसी ब्राउज़र में ctrl-s का उपयोग करता हूं , जब मैं भूल जाता हूं कि मैं एक वेबप का उपयोग कर रहा हूं और शॉर्टकट से कुछ उपयोगी करने की अपेक्षा करता हूं। मैं सामान्य रूप से निराश हूं। जब आप ctrl-s को हिट करते हैं, तो जीमेल आपके ईमेल को बचाता है, हालांकि आप कभी भी नोटिस नहीं करेंगे क्योंकि जब यह सिर्फ वही करता है जो आप इसकी अपेक्षा करते हैं, और हर डेस्कटॉप ऐप क्या करता है, तो आप वास्तव में नोटिस नहीं करते हैं। जब आप सोचते हैं कि आप जीमेल को HTML के रूप में सहेजना चाहते हैं, तो यह ध्यान दें और यह कष्टप्रद है।
कार्सन मायर्स

4
यह वास्तव में आवेदन पर निर्भर करता है। मैं एक टर्मिनल एमुलेटर वेब ऐप बना रहा हूं और यदि आवश्यक नहीं है तो ctrl + c को ओवरराइड करना व्यावहारिक लगता है।
ब्रैक

एचटीएमएल पेज को वास्तव में सहेजने की आवश्यकता काफी पतली है, मुझे लगता है कि मैं ऐसा कर रहा हूं। हालाँकि जैसा कि अन्य लोगों ने कहा है, ब्राउज़र तेजी से वह जगह बन रहा है जहाँ हम काम करते हैं, हमारे सभी काम, और अधिक से अधिक ब्राउज़र शब्द प्रोसेसर की जगह ले रहे हैं और अन्य ऐप पारंपरिक रूप से डेस्कटॉप पर उपयोग किए जाते हैं, उपयोगकर्ता उनके कीबोर्ड के आदी हैं। शॉर्टकट, इसलिए उनका समर्थन करना प्रयोज्य और अपनाने के लिए आवश्यक है। यदि आप एक वर्ड प्रोसेसर बनाते हैं और मुझे ALT + SHIFT + S या कुछ और खराब करते हैं, तो मैं एक उपयोगकर्ता के रूप में एक बुरी आदत की तरह आपके ऐप को डंप करने जा रहा हूं।
डेविडशेकर

4

@ ईवे: जैसा कि ब्राउज़र अमीर और समृद्ध कार्यक्षमता के लिए घर बन जाता है और डेस्कटॉप ऐप्स को बदलना शुरू कर देता है, यह कीबोर्ड शॉर्टकट के उपयोग से गुजरने का विकल्प नहीं है। आउटलुक को त्यागने की मेरी इच्छा में जीमेल के समृद्ध और कीबोर्ड सेटों का सहज योगदान था। टोडोइस्ट, Google रीडर, और Google कैलेंडर में कीबोर्ड शॉर्टकट मेरी ज़िंदगी को दैनिक आधार पर बहुत आसान बनाते हैं।

डेवलपर्स को निश्चित रूप से सावधान रहना चाहिए कि उन कीस्ट्रोक्स को ओवरराइड न करें जो पहले से ही ब्राउज़र में अर्थ रखते हैं। उदाहरण के लिए, WMD टेक्स्टबॉक्स मैं अनावश्यक रूप से इंटरप्रिट Ctrl+ के Delरूप में टाइप कर रहा हूं "डिलीट वर्ड फॉरवर्ड" के बजाय "ब्लॉकक्वाओट"। मुझे उत्सुकता है अगर "ब्राउज़र-सुरक्षित" शॉर्टकट की कहीं मानक सूची है जिसे साइट डेवलपर उपयोग कर सकते हैं और जो ब्राउज़र भविष्य के संस्करणों से दूर रहने के लिए प्रतिबद्ध होंगे।


1
इसका उत्तर है, ब्राउज़र-सुरक्षित शॉर्टकट की कोई सुरक्षित सूची नहीं है। और यह दो रेजोन के लिए अच्छा है: 1. शॉर्टकट अनुकूलन योग्य हैं (कम से कम ओपेरा में)। 2. ऐसा करते हुए, आप ब्राउज़र के उपयोग के लिए आपको अधिक शक्ति देने के लिए ब्राउज़र विक्रेता रचनात्मकता को प्रतिबंधित नहीं करते हैं।
gizmo

3

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

यह @ एलनबेलोज़ के उत्तर की जगह अप-टू-डेट संस्करण है which जिसके साथ किया गया है key। यह भी क्रोम की राजधानी कुंजी गड़बड़ (जहां अगर आप प्रेस के साथ भी काम करता है Ctrl+ Sयह राजधानी भेजता रों के बजाय रों)। सभी आधुनिक ब्राउज़रों में काम करता है।


इसे जांचने के लिए, स्निपेट बॉक्स के अंदर क्लिक करें और Ctrl + S दबाएं।
शाम

1

यह मेरा समाधान था, जो अन्य सुझावों की तुलना में यहां पढ़ने के लिए बहुत आसान है, आसानी से अन्य प्रमुख संयोजनों को शामिल कर सकते हैं, और IE, क्रोम और फ़ायरफ़ॉक्स पर परीक्षण किया गया है:

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

1
के उपयोग के लिए +1 String.fromCharCode। हालाँकि, Mac में नियंत्रण कुंजी नहीं है। के साथ कमांड कुंजी के लिए टेस्ट करें evt.metaKey। यह trueविंडोज पर मैक और विन पर Cmd के लिए लौटता है ।
कटोफेट


0

यह काम करना चाहिए ( 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

एलन बेलोज़ का उत्तर: (e.altKey) उन उपयोगकर्ताओं के लिए जोड़ा गया है जो AltGrटाइपिंग करते समय उपयोग करते हैं (जैसे पोलैंड)। बिना इस दबाने AltGr+ Sके रूप में ही परिणाम प्राप्त होगा 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

मेरे द्वारा बनाया गया यह प्लगइन सहायक हो सकता है।

लगाना

आप इस प्लगइन का उपयोग कर सकते हैं जिसे आपको कुंजी कोड्स की आपूर्ति करनी है और इस तरह से चलाया जा सकता है

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

कोड में मैंने दिखाया है कि कैसे Ctrl+ के लिए प्रदर्शन करना है S। आपको लिंक पर विस्तृत दस्तावेज़ मिलेगा। प्लगइन कोडीन पर मेरे पेन के जावास्क्रिप्ट कोड अनुभाग में है।


0

मैंने IE पर अपनी समस्या को हल किया , alert("With a message")डिफ़ॉल्ट व्यवहार को रोकने के लिए एक का उपयोग करके :

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;
        }
    }
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.