2012-04-22 13 views
9

मुझे बहुत से संबंधित प्रश्न (यहां और कहीं और) मिल गए हैं, लेकिन इसे विशेष रूप से नहीं मिला है।जावास्क्रिप्ट: कीडाउन इवेंट: "ऊपर" तीर कुंजी आगे तीर-कुंजी कीडाउन घटनाओं को रोकती है? (उत्तर: कीबोर्ड ghosting)

मैं जब एक निश्चित क्रम में तीर कुंजियों का उपयोग, बाद में तीर "keydown" घटनाओं जेनरेट नहीं होती, तीर कुंजी (37-40) के लिए keydown घटनाओं के लिए सुनने के लिए कोशिश कर रहा हूँ लेकिन।

उदाहरण: - बॉक्स http://blog.pothoven.net/2008/05/keydown-vs-keypress-in-javascript.html

  1. उस पृष्ठ पर, "> यहां टाइप" में क्लिक करें।
  2. दबाकर रखें सही तीर कुंजी: तालिका अपडेट 39
  3. कीकोड करने के लिए सही तीर कुंजी, प्रेस पकड़ और ऊपर तीर कुंजी पकड़ करने के लिए जारी करते समय: 38
  4. को तालिका अपडेट सही और ऊपर तीर कुंजी पकड़ करने के लिए जारी है, प्रेस और पकड़ बाएँ तीर कुंजी: तालिका अगर मैं एक ही बात है, लेकिन नीचे तीर के बजाय कुंजी अप तीर कुंजी तो यह काम करता है के रूप में उम्मीद का उपयोग नहीं कर अद्यतन

करता है, हालांकि।

इसके अतिरिक्त, यदि मैं तीर कुंजियों के बजाय कीपैड का उपयोग करता हूं तो यह अपेक्षा के अनुसार काम करता है।

मैं keydown घटना के सामान्य संचालन को रोकने कर रहा हूँ (दोनों घटना श्रोता में झूठी वापस लौट कर, और preventDefault फोन करके()), लेकिन व्यवहार बनी हुई है।

मैंने सोचा कि यह मेरा कीबोर्ड हो सकता है, लेकिन यह एक लैपटॉप के साथ-साथ एक दोस्त की मशीन पर भी होता है।

क्या किसी के पास क्या चल रहा है के बारे में कोई अंतर्दृष्टि है? या कामकाज पर कुछ अच्छे विचार?

[संपादित करें] मेरा मतलब यह है कि मेरा क्या मतलब है। मुझे पता है यह सभी ब्राउज़रों पर काम नहीं कर सकता, लेकिन मैं सिर्फ प्रदर्शित करने के लिए क्या मेरे लिए क्या हो रहा है (W7 पर क्रोम पर है और यह भी मैक ओएस 10.6.8 पर & सफारी क्रोम)

<html> 
<body> 
<script> 

var keysDown = {}; 
addEventListener("keydown", function(e) { 
    keysDown[e.keyCode] = true; 
    document.getElementById('latestKeydown').value=e.keyCode; 
}, false); 

addEventListener("keyup",function(e){ 
    delete keysDown[e.keyCode]; 
}, false); 

var loop = function(){ 
    document.getElementById('upinput').value=keysDown[38]; 
    document.getElementById('downinput').value=keysDown[40]; 
    document.getElementById('leftinput').value=keysDown[37]; 
    document.getElementById('rightinput').value=keysDown[39]; 
} 

setInterval(loop,1); 

</script> 
Up: <input id="upinput" type=text size=10><br /> 
Down: <input id="downinput" type=text size=10><br /> 
Left: <input id="leftinput" type=text size=10><br /> 
Right: <input id="rightinput" type=text size=10><br /> 
Recent Keydown: <input id="latestKeydown" type=text size=10><br /> 

</body> 
</html> 

अपने लैपटॉप पर एक साथ इस फेंक दिया दोबारा, मुद्दा यह है: यदि मैं ए को दबाता हूं, तो एस, फिर डी, फिर एफ, फिर जी, आप "हालिया कीडाउन" को हर बार अद्यतन कर सकते हैं जब मैं एक नई कुंजी पकड़ना शुरू करता हूं।

हालांकि, अगर मैं सही तीर दबाकर रखें, फिर ऊपर तीर, फिर छोड़ दिया तीर, मैं "हाल keydown" बायां तीर कुंजी के लिए अद्यतन करने नहीं दिख रहा।

+1

कोड की कुछ पंक्तियों की प्रतीक्षा कर रहा है। –

+0

स्टैक ओवरफ़्लो में आपका स्वागत है! –

+0

* "... पीसी को कीबोर्ड के तारों के तरीके से समझ में नहीं आ रहा है" * ओओ –

उत्तर

3

मैं इस पर अधिकार पर बात नहीं कर सकते हैं, लेकिन https://stackoverflow.com/a/4177260/562209 के अनुसार, जब तक आप एक से अधिक कुंजी दबाएँ "पीसी के बारे में, संशोधक कुंजी (रों) और एक गैर संशोधक कुंजी के एक साथ प्रेस के साथ काम कर रहे हैं नहीं हो सकता है कीबोर्ड के तारों के तरीके के कारण इसे समझें "।

+3

यहां इस मुद्दे का एक अच्छा स्पष्टीकरण है: http://www.microsoft.com/appliedsciences/antighostingexplained.mspx – user123444555621

+0

गह :(धन्यवाद, दोस्तों, यह संभावित अपराधी लगता है। – ElleryTheJones

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