2011-05-24 11 views
8

मैं कुंजीपटल की जांच करने के लिए इस कोड का उपयोग कर रहा हूं और एक कुंजी नीचे होने पर 'दबाया' स्ट्रिंग प्रदर्शित कर रहा हूं।window.event.keyCode फ़ायरफ़ॉक्स पर इसे कैसे करें?

<body onKeyDown="doKey(window.event.keyCode)" onKeyUp="doKey2(window.event.keyCode)"> 

<script> 
function doKey($key) { 
    document.getElementById('keydown').innerHTML='Pressed'; 
} 

function doKey2($key) { 
    document.getElementById('keydown').innerHTML=''; 
} 
</script> 

<div id="keydown"></div> 

समस्या यह है कि किसी कारण से यह केवल क्रोम पर काम कर रहा है। मुझे लगता है कि 'window.event.keyCode' कुछ भी वापस नहीं करता है। मैं कम से कम फ़ायरफ़ॉक्स में भी इसे कैसे काम करूं? धन्यवाद

+0

यह चीज़ आपके लिए काम करेगी, 'var key = event.keyCode || event.charCode; ' –

उत्तर

14
<html> 
    <body onKeyDown="doKey(event)" onKeyUp="doKey2(event)"> 

    <script> 
    function doKey(e) { 
     evt = e || window.event; // compliant with ie6   
     document.getElementById('keydown').innerHTML = evt.keyCode+' Pressed'; 
    } 

    function doKey2(e) { 
     document.getElementById('keydown').innerHTML=''; 
    } 
    </script> 

    <div id="keydown"></div> 
    </body> 
</html> 

अगर हम पारित कर दिया event पैरामीटर के रूप में, सबसे आधुनिक ब्राउज़रों में अच्छी तरह से काम करेगा। मैंने क्रोम 12, फ़ायरफ़ॉक्स 4, आईई 7/8/9 के साथ परीक्षण किया है।

21

कुछ ब्राउज़रों के पास वैश्विक ईवेंट ऑब्जेक्ट होता है, अन्य ईवेंट ऑब्जेक्ट को ईवेंट हैंडलर को पैरामीटर के रूप में भेजते हैं। क्रोम और इंटरनेट एक्सप्लोरर पूर्व का उपयोग करता है, फ़ायरफ़ॉक्स बाद वाले का उपयोग करता है।

कुछ ब्राउज़र keyCode का उपयोग करते हैं, अन्य charCode का उपयोग करते हैं।

उपयोग arguments[0] एक पैरामीटर के रूप में भेजा घटना वस्तु लेने के लिए, और अगर वहां कोई नहीं वस्तु है, वहाँ के बजाय एक वैश्विक वस्तु है:

onkeydown="doKey(arguments[0] || window.event)" 

विधि में आप या तो keyCode या charCode के लिए जाँच कर सकते हैं

function doKey(event) { 
    var key = event.keyCode || event.charCode; 
    ... 
} 

लोअरकेस नाम onkeydown पर ध्यान दें। यदि आप एक्सएचटीएमएल इवेंट नामों का उपयोग कर रहे हैं तो लोअरकेस होना चाहिए, या ब्राउज़र इसे अनदेखा कर सकता है।

+0

ऐसा लगता है कि इस तरह से मुझे कीडाउन और कीप मिल रही है लेकिन मूल्य कुंजी हमेशा संबंधित कुंजीकोड के बजाय 0 है ... क्या आपको पता है कि समस्या क्या हो सकती है? मैं यहाँ अपने कोड का परीक्षण किया: http://www.chusmix.com/game/beta/move.php आप keydown पर कीकोड देख सकते हैं लेकिन यह हमेशा 0. – lisovaccaro

+0

@ Liso22 है: यह हो सकता है, जिसे आप पेज पर एक डॉक्टरेट नहीं है ... जब मैं फ़ायरफ़ॉक्स, आईई, ओपेरा, सफारी और क्रोम में यह परीक्षण चलाता हूं, तो यह काम करता है: http://jsfiddle.net/U7Xpp/ – Guffa

0

मैंने एक ही समस्या में भाग लिया है, क्योंकि मुझे यकीन है कि हजारों कोडर हैं।

समस्या यह है कि ब्राउज़र (IE के अलावा) window.event पसंद नहीं करते हैं।

मैं चारों ओर एक समाधान खोजने के लिए (जो मैं कैसे इस भर में ठोकर खाई) की कोशिश कर रहा poking कर रहा हूँ, और मैंने पाया निम्नलिखित (अभी तक):

1) लिखें JQuery:

$(document).keyup(function(e) { 
     var GetKey = e.keyCode; 
`enter code here` 
     } 
    }); 

2) कुंजी चर को फिर से परिभाषित करें:

var key = (window.event) ? evt.keyCode : evt.which; 

मैंने JQuery समाधान की कोशिश की। ऐसा लगता है कि एफएफ में ठीक है, लेकिन मैं आईई में एक अप्रत्याशित बग में भाग गया कि मैं अभी भी हल करने की कोशिश कर रहा हूं। मैंने अभी तक दूसरे समाधान की कोशिश नहीं की है; यह अगला है, अगर मैं काम करने के लिए JQuery नहीं प्राप्त कर सकता।

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