2012-02-01 14 views
7

यह शायद इरादा व्यवहार है या कम से कम एक jQuery/js मुद्दा नहीं है, लेकिन अगर कोई है तो मुझे कुछ स्पष्टीकरण चाहिए।jQuery कीप्रेस घटना कुंजी पर होने पर बार-बार आग लगती है - लेकिन सभी कुंजियों पर नहीं

$(document).bind('keypress', function(e){ 
    switch(e.keyCode) 
    { 
     case 37: 
      console.log('left cursor keydown, will fire on hold'); 
      break; 
     case 39: 
      console.log('right cursor keydown, will fire on hold'); 
      break; 
     case 80: 
      console.log('p will only fire once per press!'); 
      break; 
    } 
}); 

तुम भी jQuery के डॉक्स में उदाहरण के साथ खेल सकते हैं:

समझें http://api.jquery.com/keypress/

जब एक बाईं या दाईं ओर कर्सर दबाया जाता है (जैसे A,E,[, आदि के रूप में या कई अन्य कुंजी), घटना आग लगती है और आपको कंसोल में एक अच्छा लॉग संदेश मिलता है। इरादे के अनुसार सभी ठीक &। हालांकि, अब कुंजी को दबाए रखने का प्रयास करें - एक संक्षिप्त विराम के बाद आप देखेंगे कि जब आप कुंजी पकड़ते हैं तो कीडाउन ईवेंट कई बार आग लगती है, हालांकि यदि आप p (या, उदाहरण के लिए, j) मारने का प्रयास करते हैं, तो यह केवल आग होगी एक बार।

मैं इसका परीक्षण एफएफ 9.0.1 और मैक ओएसएक्स 10.7.1 और jQuery 1.7.1 का उपयोग कर रहा हूं।

क्या यह डिज़ाइन द्वारा है, क्या यह एक ब्राउज़र-निर्भर सुविधा है, या यह ओएस, या यहां तक ​​कि कीबोर्ड के साथ भी है? क्या किसी को भी चाबियों की एक सूची मिली है जो दोहराएगा और चाबियाँ जो नहीं होंगी?

जहां तक ​​उपयोग का मामला जाता है, वहां कोई भी वास्तव में नहीं होता है - जब मैं कर्सर प्रेस पर एनीमेशन बाध्य करता था और कुंजी दबाए जाने पर विचित्र व्यवहार देखना शुरू कर देता था। मेरा कामकाज keyup() ईवेंट का उपयोग करना था, और preventDefault() पर keydown() ईवेंट पर स्क्रीन को स्क्रॉल करने वाले कर्सर को रोकने के लिए, मैंने जिन चीजों को प्रतिस्थापित किया था, उनके लिए उपयोग किया था।

अद्यतन: लगता है कि कुंजीपटल घटना पर, कुंजीकोड हमेशा अधिकतर अक्षरों के लिए 0 होता है, जिसके बारे में मैंने सोचा था कि हैंडलर केवल एक बार निकाल दिया गया था। कुछ और परीक्षणों के बाद मैं बार-बार लॉग प्रविष्टियों को कर्सर के लिए देखता हूं। आप हालांकि jQuery एपीआई पृष्ठ की जांच उस पर डेमो उपयोग करते हैं, यह व्यवहार मैं का वर्णन किया गया था दर्शाती है: http://api.jquery.com/keypress/

फिर भी व्याख्या नहीं कर सकते कि अपने आप को:/

+0

सभी कुंजी दोहराना। प्रत्येक स्विच केस के अंत में आपको 'ब्रेक' जोड़ना होगा, जब तक कि आप जानबूझकर उन्हें बाहर नहीं छोड़ देते। या तो आपका कीबोर्ड खराब है, या आपके कोड को बस कुछ 'ब्रेक' की आवश्यकता है। –

+0

मेरे लिए नहीं - "पी" बस ठीक है। मुझे लगता है कि यह आपके कीबोर्ड के हार्डवेयर/फर्मवेयर का एक फ़ंक्शन है। – Pointy

+0

@ ब्रायन ग्राहम ने बस इसे देखा, धन्यवाद :) jsfiddle पर फिर से परीक्षण करने के बाद मैं सभी चाबियों पर भी दोहराना देख रहा हूं - हालांकि कीप्रेस घटना के लिए अधिकांश कुंजी पर कीकोड एटीआर 0 है, जो कुछ अजीब व्यवहार की व्याख्या करेगा I – jammypeach

उत्तर

5

व्यवहार ब्राउज़रों और ऑपरेटिंग सिस्टम के बीच अंतर होता है। निम्नलिखित पृष्ठ अनुभाग 2.2 में विस्तार से ऑटो दोहराया महत्वपूर्ण घटनाओं के विषय को शामिल किया गया:

http://unixpapa.com/js/key.html

+0

महान देख रहा था - यह पूरी तरह से बताता है, धन्यवाद। – jammypeach

0

इसके अलावा - सभी लोग हैं, जो इस पोस्ट को देखने के लाभ के लिए: प्रयास करें "keydown" विधि

कीप्रेस कई बार निकाल दिया जाएगा ... keydown नहीं

http://jquerymobile.com/demos/1.0a2/experiments/api-viewer/docs/keypress/index.html

+4

'कीडाउन' वास्तव में दोहराता है (कम से कम नवीनतम Google क्रोम में)। इसे यहां आज़माएं: '$ (दस्तावेज़) .on ('keydown', function (ev) {console.log (ev)})' – Juribiyan

1

यह समस्या उम्र के लिए चारों ओर हो गया है होगा, लेकिन मुझे लगता है कि मैं एक फिक्स की खोज की है अभी। यह ठीक काम करता है

$("#search_query").keyup(function(event) { 

    //this will void fake keypresses 
    if(event.charCode == 0 && event.keyCode == 0) { 
     return false; 
    } 

    //place the rest of you code here 
}); 
+0

इसकी आइसक्रीम चिकनी ... शानदार !!! –

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

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