2010-09-09 17 views
35

मैं दस्तावेज़ ऑब्जेक्ट के कीप्रेस ईवेंट हैंडलर को अवरुद्ध करके, मेरे ऑब्जेक्ट में कुछ पेजों पर कीबोर्ड शॉर्टकट्स के लिए समर्थन जोड़ना चाहता हूं, एक्सेसकी विशेषता नहीं।ब्राउज़र के कीबोर्ड शॉर्टकट्स को ओवरराइड करना

समस्या यह है कि प्रत्येक ब्राउज़र के अपने कीबोर्ड संयोजन होते हैं, इसलिए कीबोर्ड वेब संयोजनों के एक सेट के साथ आना असंभव है जो सभी वेब ब्राउज़र पर काम करता है और फिर भी सुसंगत होता है। (उदाहरण के लिए यदि शॉर्टकट सहेजने के लिए शॉर्टकट होगा था Ctrl + शिफ्ट + एस जबकि हटाने के लिए एक Alt + डी था।)

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

सभी नकारात्मक तरफ, क्या यह संभव है? यदि ऐसा, तो तुम यह कैसे करते हो? http://unixpapa.com/js/key.html

के लिए कि क्या यह कुछ है कि (उपकरण पट्टी बटन पर होवर) बहुत ज्यादा भंग किए बिना किया जाना चाहिए, stackoverflow के सवाल संपादक ओवरराइड का काफी कुछ कुंजी है:

+2

एक निजी नोट पर, आम ब्राउज़र शॉर्टकट है कि इस तरह 'Cw',' Ct', 'CSt' ... Google के उत्पादों के कुछ सामान्य ब्राउज़र शॉर्टकट और उसके अविश्वसनीय रूप से परेशान ओवरराइड के रूप में ब्राउज़र के बीच संगत कर रहे हैं अधिभावी से बचने के लिए कृपया ! –

+1

यह जानना मुश्किल हो सकता है कि "सामान्य" उपयोगकर्ता शॉर्टकट क्या हैं। उदाहरण के लिए, क्या कई उपयोगकर्ता 'सी-ई' का उपयोग करते हैं या क्या यह ओवरराइड करने के लिए अपेक्षाकृत ठीक है? प्रत्येक ब्राउज़र शॉर्टकट का उपयोग करने वाले उपयोगकर्ताओं के पर्सेंट का चार्ट होना बहुत अच्छा होगा। – JKillian

उत्तर

12

यहाँ इस का एक बहुत अच्छा कवरेज नहीं है ।

अधिकांश (यदि सभी नहीं) ब्राउज़र की शॉर्टकट के ओवरराइड किया जा जाएगा:

+3

आपको 'e.preventDefault() के साथ * कीडाउन * ईवेंट को संभालने की आवश्यकता है; e.stopPropagation(); '। कुंजीडाउन को संभालने के दौरान याद रखने के लिए एक बात यह है कि यदि उपयोगकर्ता थोड़ा अधिक समय तक दबाए रखता है तो यह कई बार हो सकता है। – ShitalShah

+7

आपको सीधे स्टैक ओवरफ़्लो पर प्रश्न का उत्तर देना चाहिए, कहीं और लिंक नहीं करना चाहिए (बाहरी लिंक तोड़ सकते हैं या बदल सकते हैं या सीधे जवाब का जवाब नहीं दे सकते हैं)। देखें [क्या उत्तर हैं कि वास्तव में कहीं और "अच्छे उत्तर" लिंक हैं?] (Http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links- कहीं--ally- good-answers)। – mgiuca

+0

जब मैं स्टैक ओवरफ्लो के प्रश्न संपादक का उपयोग कर रहा हूं, तो मुझे वास्तव में जिस तरह से Ctrl-L चोरी हो जाता है उससे नफरत है। प्रश्नों को संपादित करते समय वेब खोज करना मुश्किल बनाता है। –

29
onkeydown = function(e){ 
    if(e.ctrlKey && e.keyCode == 'S'.charCodeAt(0)){ 
    e.preventDefault(); 
    //your saving code 
    } 
} 
+5

कई स्थितियों में, मुझे नहीं लगता कि यह काम करेगा। 'टैब' जैसी चाबियों के साथ, स्क्रिप्ट स्क्रिप्ट को सही ढंग से कुंजी के व्यवहार को बदलने से पहले बहुत से ब्राउज़र कमांड को रोक देंगे। – Trafalmadorian

+4

'event.preventDefault' W3C अनुपालन वाले ब्राउज़र पर केवल काम करता है (जब यह करता है), सामान्य वेब पर प्रमुख ब्राउज़र नहीं (कहें), माइक्रोसॉफ्ट के - जब तक, निश्चित रूप से, आप jQuery जैसी लाइब्रेरी का उपयोग नहीं कर रहे हैं जो इसे जोड़ता है तुम्हारे लिए। –

+3

टीजे> आपका मतलब है कि jQuery आईई पर भी कीबोर्ड शॉर्टकट ओवरराइड कर सकता है? –

8

यहाँ इस समस्या के लिए अपने समाधान है। केवल सिस्टम वाले, जैसे Alt + टैब या विंडोज कुंजी नहीं होगी।

document.onkeydown = overrideKeyboardEvent; 
document.onkeyup = overrideKeyboardEvent; 
var keyIsDown = {}; 

function overrideKeyboardEvent(e){ 
    switch(e.type){ 
    case "keydown": 
     if(!keyIsDown[e.keyCode]){ 
     keyIsDown[e.keyCode] = true; 
     // do key down stuff here 
     } 
    break; 
    case "keyup": 
     delete(keyIsDown[e.keyCode]); 
     // do key up stuff here 
    break; 
    } 
    disabledEventPropagation(e); 
    e.preventDefault(); 
    return false; 
} 
function disabledEventPropagation(e){ 
    if(e){ 
    if(e.stopPropagation){ 
     e.stopPropagation(); 
    } else if(window.event){ 
     window.event.cancelBubble = true; 
    } 
    } 
} 
+4

यह ब्राउज़र संपादन मेनू लाने से ALT + E को रोक नहीं रहा है। –

संबंधित मुद्दे