2010-08-17 18 views
7

यदि मैं 'st' टाइप करता हूं, तब तक जब मैं टी दबाता हूं, तो के onkeypress/onkeydown फ़ंक्शंस में इनपुट आउटपुट करता है, तो मुझे केवल 'एस' मिलता है।जावास्क्रिप्ट, कुंजी प्रेस मूल्य हमेशा नवीनतम के पीछे एक चरित्र है?

ऐसा क्यों है? मैं इस अंतराल से कैसे छुटकारा पा सकता हूं?

उत्तर

11

keypress के बजाय keyup ईवेंट का उपयोग करें। keydown पहले-कीस्ट्रोक मान दिखाएगा, जैसा कि keypress (स्पष्ट रूप से) होगा।

+2

अजीब है कि @ टॉम पहले से ही "ऑनकीप" की कोशिश करने का सुझाव देता है? – MrWhite

+1

मैं सुझाव दूंगा कि उसने सही तरीके से कोशिश नहीं की है। –

+3

* कीप * कुंजी जारी होने पर ही आग लग जाएगी, यह दोहराए गए कीस्ट्रोक के लिए आग नहीं लगेगी। तो यदि आप एक ही चरित्र में से एक से अधिक दर्ज करने के लिए कुंजी दबा रहे हैं, तो कुंजी जारी होने के बाद तक कीप आग नहीं लगेगी। –

0

क्योंकि कीपोक घटना तब तक पंजीकृत नहीं होती है जब तक कि कीप घटना नहीं होती है। तो आपको onkeypress के बजाय onkeyup ईवेंट का पता लगाना चाहिए।

8

keypress ईवेंट के भीतर, टाइप किए गए चरित्र को पंजीकरण से रोकने के लिए अभी भी संभव है, इसलिए keypress ईवेंट के बाद तक इनपुट का मूल्य कैन अपडेट नहीं किया जा सकता है। आप इसके बजाय keyup ईवेंट का उपयोग कर सकते हैं, या देरी सेट अप करने के लिए window.setTimeout() का उपयोग कर सकते हैं।

+0

+1, 0ms की देरी का उपयोग करके इनपुट अपडेट होने के तुरंत बाद कोड निष्पादित करने के लिए पर्याप्त है। –

+0

@ एंडी: बहुत अच्छी नोक। (लगभग) हर ब्राउज़र में काम करता है? –

+1

@ मार्सेल: यह प्रत्येक ब्राउज़र में भी वही काम करेगा। मैं विषय पर अधिक जानकारी के लिए जे रेसिग [कैसे जावास्क्रिप्ट टाइमर काम करता है] (http://ejohn.org/blog/how-javascript-timers-work/) पढ़ने की सलाह देते हैं। –