2010-03-15 8 views
86

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

उदाहरण के लिए:

$("button").click(function() { 
    if([KEYPRESSED WHILE CLICKED]) { 
     // Do something... 
    } else { 
     // Do something different... 
    } 
}); 

यह सब या कैसे पर यदि संभव हो तो यह संभव है यह किया जा सकता है?

उत्तर

42

आपको अलग से keydown() और keyup() का उपयोग कर कुंजी स्थिति पर नज़र रखने की जरूरत है:

var ctrlPressed = false; 
$(window).keydown(function(evt) { 
    if (evt.which == 17) { // ctrl 
    ctrlPressed = true; 
    } 
}).keyup(function(evt) { 
    if (evt.which == 17) { // ctrl 
    ctrlPressed = false; 
    } 
}); 

list of key codes देखें। अब आप यह जांच सकते हैं:

$("button").click(function() { 
    if (ctrlPressed) { 
    // do something 
    } else { 
    // do something else 
    } 
}); 
+5

उस समय JavaScript इसका इस्तेमाल करने में सक्षम था (नहीं मैं एक बेहतर तरीका पता है कि) यदि आप ALT कुंजी का पता लगाने कर रहे हैं, और उपयोगकर्ता ALT-टैब्स के लिए किया जाता है एक और विंडो, फिर कुंजीपटल ईवेंट ब्राउज़र द्वारा नहीं पता चला क्योंकि यह किसी अन्य एप्लिकेशन पर हुआ था। उस बिंदु से, jquery सोचता है कि कुंजी नीचे है, जब तक कि वे आपके jquery ऐप में कुंजीपटल न हो जाएं। यह केवल एएलटी कुंजी के साथ महत्वपूर्ण है, जहां तक ​​मैं कल्पना कर सकता हूं। – Ben

+1

मैक ओएस एक्स के लिए जो सीएमडी-टैब होगा, लेकिन मुझे लगता है कि प्रिंसिपल अभी भी – murftown

+0

या ब्राउज़र के टैब को बदलने के लिए Ctrl + Tab रखता है – Seeven

152

आप आसानी से ईवेंट गुणों से शिफ्ट, alt और नियंत्रण कुंजी का पता लगा सकते हैं;

$("button").click(function(evt) { 
    if (evt.ctrlKey) 
    alert('Ctrl down'); 
    if (evt.altKey) 
    alert('Alt down'); 
    // ... 
}); 

अधिक गुणों के लिए quirksmode देखें। यदि आप अन्य कुंजियों का पता लगाना चाहते हैं, तो cletus's answer देखें।

+3

मुझे jQuery इवेंट ऑब्जेक्ट पर उस प्रॉपर्टी को नहीं दिखाई देता है: http: //api.jquery। कॉम/श्रेणी/घटनाओं/घटना-वस्तु/ – cletus

+1

ठीक है, जैसा कि पृष्ठ कहता है, "मूल घटना से अधिकांश गुणों की प्रतिलिपि बनाई गई है और नई घटना वस्तु को सामान्यीकृत किया गया है।" ctrlKey, altKey इत्यादि ecmascript मानक का हिस्सा हैं (उपरोक्त jquery api पेज पर पहला लिंक देखें), इसलिए (कम से कम सभ्य ब्राउज़रों में) ईवेंट ऑब्जेक्ट में आमतौर पर उन गुणों को भी सेट किया जाता है। – kkyy

+3

क्विर्क मोड केवल ये कहता है कि इन्हें * एक महत्वपूर्ण घटना * में परिभाषित किया गया है .. माउस ईवेंट के बारे में कोई उल्लेख नहीं है। –

4

मैं इस विधि के नीचे की ओर अकेले

<a href="" onclick="return Show(event)"></a> 

    function Show(event) { 
      if (event.ctrlKey) { 
       alert('Ctrl down'); 
      } 
    } 
संबंधित मुद्दे

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