JQuery এর সাথে CTRL + S ক্যাপচার করার জন্য সেরা ক্রস ব্রাউজার পদ্ধতি?


162

আমার ব্যবহারকারীরা ফর্মটি সংরক্ষণ করতে Ctrl+ হিট করতে সক্ষম হতে চান + কী সংমিশ্রণটি Sক্যাপচার এবং আমার ফর্মটি জমা দেওয়ার কি কোনও ভাল ক্রস ব্রাউজার উপায় আছে ?CtrlS

অ্যাপ্লিকেশন দ্রুপালে তৈরি করা হয়েছে, তাই 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
ওএস এক্স ওয়েবকিট ব্রাউজারগুলিতে সেন্টিমিড + গুলি ১৯ টি প্রত্যাবর্তন করে, সুতরাং এটির জন্য এটি পরীক্ষা করাও মূল্যবান। উদাহরণস্বরূপ যদি ((ইভেন্ট.হুইচ == 115 && ইভেন্ট.ctrlKey) &&! (ইভেন্ট.হুইচ == 19%) সত্য ফিরে আসে;
টাদাস টি

6
আমার জন্য কেবল ফায়ারফক্সে কাজ করে। আইই 9 এবং ক্রোম কোনও কীপ্রেস নিবন্ধন করে না।
পেলস

7
এমনকি $ (দস্তাবেজ) .কাইপ্রেস ($ (উইন্ডো) এর পরিবর্তে .কিপ্রেস) সহ, আইপি এবং ক্রোম এখনও স্ক্রিপ্টটি করার আগে 'সিটিআরএল' দিয়ে কিপ্রেস ইভেন্টটি দখল করে।
পেলস

16
ক্রোমের keydownপরিবর্তে ব্যবহার করুনkeypress
ডেসটান

3
দুর্ভাগ্যক্রমে এটি
পুরানো

250

এটি আমার Ctrl+1 S, Ctrl+ Fএবং Ctrl+ ওভারলোডের জন্য (jquery ব্যবহার করে) কাজ করে 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
যদি আপনি ব্যবহার বিশুদ্ধ জাতীয় সঙ্গে doable window.addEventListener(পরিবর্তে$(window).bind(

2
@ নেটসেস আপনি সতর্কতা সরিয়ে ফেললে এটি সেভ ডায়ালগটি খোলে না। সতর্কতার কারণে এটি ঘটে। সমস্ত ব্রাউজারে আমার জন্য কাজ করে। চমৎকার কাজ।
ক্রেজিএনউবি

2
আমার জন্য কাজ করেছেন। উপরের উত্তরটির চেয়ে এই উত্তরটি গ্রহণ করুন।
pavanw3b

1
@ ফায়ারফ্লাইট: একটি কার্যকর else ifহবে না কারণ মূল ifবক্তব্যটি ইতিমধ্যে সত্য হিসাবে মূল্যায়ন করা হবে। আসল ifস্টেটমেন্টের আগে আপনাকে আপনার কোডটি রাখতে হবে , আসলটিকে একটি তে পরিণত করতে হবে else if
ড্যানি রুইজটার্স

34

আপনি ব্রাউজারের নির্দিষ্ট জিনিসগুলি পরিচালনা করতে একটি শর্টকাট লাইব্রেরি ব্যবহার করতে পারেন ।

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

7
এটি একটি জিকুয়েরি প্লাগইনে রূপান্তরিত হয়েছে, কাঁটাচামচ করা হয়েছে এবং রিফর্কড হয়েছে এবং এখন 1.6.x সমর্থন করে: github.com/ricardovaleriano/jquery.hotkeys
ফলিক্স সাপারেলি

12
সহযোগী গুগলারের
bgs264

29

এই jQuery সমাধানটি আমার জন্য ক্রোম এবং ফায়ারফক্সে, 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
এখানে একমাত্র সমাধান যা সঠিকভাবে কাজ করছে। অনেক ধন্যবাদ!
স্টিফান ওয়েইনহোল্ড

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 এখন আমি এটি তাকান, আমি মনে করি যে প্রতিরোধের ডিফল্টটি অপ্রয়োজনীয় কারণ এটি প্রত্যাবর্তন মিথ্যা ট্রিগার করে (এবং স্টপপ্রোপেশন) তবে নিশ্চিত নয় যে এটি প্রশ্নের পক্ষে অনেক গুরুত্বপূর্ণ
ইরান মেডান

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-গুলি করা হয়। আমি সাধারণত হতাশ আপনি সিটিআরএল-তে আঘাত করলে Gmail আপনার ইমেল সংরক্ষণ করে, যদিও আপনি কখনই লক্ষ্য করবেন না কারণ যখন এটি আপনি যা প্রত্যাশা করেন ঠিক তা করে এবং প্রতিটি ডেস্কটপ অ্যাপ্লিকেশন কী করে, আপনি সত্যিই লক্ষ্য করবেন না। আপনি যখন লক্ষ্য করেন যে আপনি এইচটিএমএল হিসাবে জিমেইল সংরক্ষণ করতে চান এবং এটি বিরক্তিকর হয়।
কারসন মায়ার্স

4
এটি সত্যই প্রয়োগের উপর নির্ভর করে। আমি একটি টার্মিনাল এমুলেটর ওয়েব অ্যাপ্লিকেশন তৈরি করছি এবং যদি প্রয়োজন না হয় তবে সিআরটিএল + সি ওভাররাইডিং ব্যবহারিক মনে হয়।
ব্র্যাক

আসলে এইচটিএমএল পৃষ্ঠা সংরক্ষণ করার প্রয়োজনটি মোটামুটি পাতলা, আমি নিজেকে কখনই এটি করতে দেখি। তবে অন্যেরা যেমন বলেছে, ব্রাউজারটি আমরা যেখানে কাজ করি সেখানে দ্রুত হয়ে উঠছে, আমাদের সমস্ত কাজ, এবং আরও অনেক বেশি ব্রাউজারগুলি ওয়ার্ড প্রসেসর এবং ডেস্কটপে প্রচলিতভাবে ব্যবহৃত অন্যান্য অ্যাপ্লিকেশনগুলির জায়গা নিচ্ছে, ব্যবহারকারীরা তাদের কীবোর্ডে অভ্যস্ত শর্টকাটস, তাই তাদের সমর্থন করা ব্যবহারযোগ্যতা এবং গ্রহণের জন্য আবশ্যক। আপনি যদি ওয়ার্ড প্রসেসর তৈরি করেন এবং আমাকে ALT + SHIFT + S বা আরও খারাপ কিছুতে আঘাত করতে পারেন তবে আমি আপনার অ্যাপ্লিকেশনটিকে একটি খারাপ অভ্যাসের মতো ব্যবহারকারী হিসাবে ফেলে দেব।
ডেভিডশেয়ার

4

@ ইভটি: ব্রাউজারটি আরও সমৃদ্ধ এবং আরও কার্যকর কার্যকারিতার জন্য হোম হয়ে ওঠে এবং ডেস্কটপ অ্যাপ্লিকেশনগুলি প্রতিস্থাপন করতে শুরু করে, এটি কীবোর্ড শর্টকাটগুলির ব্যবহারকে ভুলে যাওয়ার বিকল্প হতে পারে না। আউটলুক পরিত্যাগ করার ইচ্ছার জন্য Gmail এর সমৃদ্ধ এবং কীবোর্ড কমান্ডগুলির স্বজ্ঞাত সেট set টোডোইস্ট, গুগল রিডার এবং গুগল ক্যালেন্ডারে কীবোর্ড শর্টকাটগুলি প্রতিদিনের ভিত্তিতে আমার জীবনকে অনেক অনেক সহজ করে তোলে।

বিকাশকারীদের অবশ্যই ব্রাউজারে ইতিমধ্যে অর্থ রয়েছে এমন কীস্ট্রোকগুলি ওভাররাইড না করা উচিত careful উদাহরণস্বরূপ, WMD পাঠ্যবাক্স আমি অস্বাভাবিক ব্যাখ্যা মধ্যে টাইপ করছি Ctrl+ + Delহিসাবে "ব্লককোট" বদলে "শব্দকে সামনের দিকে মুছুন"। সাইট বিকাশকারীরা যে কোনও "ব্রাউজার-নিরাপদ" শর্টকাট ব্যবহার করতে পারে এবং ব্রাউজারগুলি ভবিষ্যতের সংস্করণগুলি থেকে দূরে থাকার প্রতিশ্রুতিবদ্ধ সে সম্পর্কে যদি কোনও মানক তালিকা থাকে তবে আমি আগ্রহী।


1
উত্তরটি হ'ল না, ব্রাউজার-নিরাপদ শর্টকাটগুলির কোনও নিরাপদ তালিকা নেই। এবং এটি দুটি রজনগুলির পক্ষে ভাল: ১. শর্টকাট কাস্টমাইজযোগ্য (কমপক্ষে অপেরাতে)। ২. এটি করা, আপনি ব্রাউজার ব্যবহারের জন্য আপনাকে আরও শক্তি দিতে ব্রাউজার বিক্রেতার সৃজনশীলতাকে সীমাবদ্ধ করেন না।
গ্যাজেট

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.

এই @ AlanBellows এর উত্তর, প্রতিস্থাপন একটি আপ-টু-ডেট সংস্করণ whichসঙ্গে key। এছাড়া Chrome এর রাজধানী কী সামান্য ত্রুটি (যেখানে বাটনটি চাপলে এমনকি কাজ করে Ctrl+ + Sএটা মূলধন পাঠায় s এর পরিবর্তে গুলি)। সমস্ত আধুনিক ব্রাউজারে কাজ করে।


এটি পরীক্ষা করতে, স্নিপেট বাক্সের ভিতরে ক্লিক করুন এবং Ctrl + S টিপুন।
ক্যানাইডাইড

1

এটি ছিল আমার সমাধান, যা এখানে অন্যান্য পরামর্শের চেয়ে পড়া সহজ,

$(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। যদিও, ম্যাকগুলির একটি নিয়ন্ত্রণ কী নেই। কমান্ড কী দিয়ে পরীক্ষা করুন evt.metaKey। এটি trueসিএমডি অন ম্যাক এবং উইন্ডোজ উইনে ফিরবে ।
ক্যাটোফেট


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;
        }
    }
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.