8

के साथ ब्लैकबेरी में बैकस्पेस कुंजी प्रेस कैप्चर करें क्या ब्लैकबेरी में input[type="text"] पर बैकस्पेस कुंजी प्रेस कैप्चर करने का कोई तरीका है? मैंने $('input[type="text"]').bind('keydown', function(event) { ... }); के साथ प्रयास किया है और यह बैकस्पेस (डेल) के लिए एक को छोड़कर सभी महत्वपूर्ण प्रेस ईवेंट कैप्चर करता है। इस कुंजी को दबाकर किसी भी महत्वपूर्ण घटना को आग नहीं लगती है।jQueryMobile

किसी घटना पर कब्जा करने के लिए एक तरह से पता है?

मैं ओएस 6.0 के लिए विकसित करने और ब्लैकबेरी सिम्युलेटर 9800.

संपादित के साथ परीक्षण कर रहा हूँ - कोड है कि मैं

<div id="myPage" data-role="page" data-theme="b"> 

    <div data-role="content"> 
    <input type="text" id="ddd" /> 
    </div> 

    <script type="text/javascript"> 
    $('input[type="text"]').bind('keydown', function(e){ 
     if(e.keyCode == 8) 
     alert('backspace trapped') 
    }); 
    </script> 

</div> 
+0

इस उत्तर शायद क्या आप चाहते हैं: http://stackoverflow.com/questions/942037/how-do-i-detect-the-delete-key-in-my-field-subclass – Kannika

+0

लिंक के लिए धन्यवाद, लेकिन मैं जो चाहता हूं वह जावास्क्रिप्ट का उपयोग करके ईवेंट को कैप्चर करना है, क्योंकि मैं ब्लैकबेरी के लिए मूल एप्लिकेशन प्रोग्राम नहीं कर रहा हूं। मेरे मामले में, बैकस्पेस कुंजी दबाकर किसी भी ईवेंट को नहीं चलाया जाता है ('keypress' नहीं, न तो' keydown' या 'keyup')। – Pablo

उत्तर

6

मैं सिर्फ इस झुंझलाहट के खिलाफ आए हैं, और जवाब के लिए मेरे खोज में यह सवाल पाया, इसलिए यहाँ मेरी जांच और समाधान (अच्छी तरह से, वैकल्पिक हल) के विवरण हैं।

keyup और keydown घटनाएँ अपने आप ब्लैकबेरी ब्राउज़र में input या textarea तत्वों पर ट्रिगर नहीं किया जाएगा जब backspace कुंजी दबाया जाता है।

$("#myInput").keydown(someFn); //Will not fire for backspace 
$(document).keyup(someFn); //Will fire for backspace 

क्यों यह मामला है, मैं बिल्कुल पता नहीं है: यह , तथापि, जब ईवेंट हैंडलर document के लिए बाध्य है ट्रिगर किया जाएगा। keyup ईवेंट को बबल करना चाहिए, और यह करता है, लेकिन जब आप बैकस्पेस कुंजी दबाते हैं तो यह भी आग नहीं होता है, इसका अधिक उपयोग नहीं होता है।

हालांकि, वहाँ हमारे निपटान में एक और घटना है। input ईवेंट ब्लैकबेरी ब्राउज़र द्वारा समर्थित है, और किसी भी समय तत्व के मूल्य में परिवर्तन सही ढंग से आग लग जाता है (जिसमें सौभाग्य से हमारे लिए, जब वह परिवर्तन बैकस्पेस कुंजी के प्रेस के कारण होता है)।

इसलिए, हम keydown और input दोनों को ईवेंट हैंडलर बाध्य करके समस्या का समाधान कर सकते हैं। keydown घटना input से पहले आग लग जाएगी, सिवाय इसके कि बैकस्पेस कुंजी दबाया गया है, इस स्थिति में keydown आग नहीं लगेगी।इसलिए हम इस बात का ट्रैक काफी आसानी से रख सकते हैं:

function handler(e) { 
    if (e.keyCode === 8) { 
     alert("Backspace!"); //Backspace was pressed :) 
    } 
} 

var elem = document.getElementById("example"); 
elem.addEventListener("keydown", function (e) { //Bind to keydown event 
    this.keydownFired = true; //Remember that keydown fired in expando property 
    handler.call(this, e); //Call the event handler 
}, false) 
elem.addEventListener("input", function (e) { //Bind to input event 
    if (!this.keydownFired) { //Keydown didn't fire, must have pressed backspace 
     e.keyCode = 8; //Fix the event object 
     handler.call(this, e); //Call the event handler 
    } 
    delete this.keydownFired; //Clean up so we can handle next key press 
}, false); 

कुछ नोट:

  • जहाँ तक मुझे इस बता सकते हैं के रूप में ब्लैकबेरी 6 ब्राउज़र में केवल एक मुद्दा मैं ब्लैकबेरी परीक्षण किया है है 5 (भौतिक उपकरण और सिम्युलेटर) और 7 (सिम्युलेटर) और दोनों बैकस्पेस कुंजी के लिए keydown और keyup ईवेंट आग लगाएंगे।

  • ओपेरा मोबाइल (संस्करण 12 में परीक्षण) को छोड़कर यह "फिक्स" लगभग हर ब्राउज़र में काम करता है जिसमें मैंने इसका परीक्षण किया है (इसलिए आप इसे अन्य ब्राउज़रों को तोड़ने के बिना ब्लैकबेरी 6 का उचित समर्थन करने के लिए उपयोग कर सकते हैं), जो कि किसी कारण से input ईवेंट कभी-कभी दो बार आग लगाना पसंद करता है।

  • यह केवल आपको हटाए जाने के लिए इनपुट में टेक्स्ट होने पर बैकस्पेस प्रेस का पता लगाने की अनुमति देता है (अन्यथा input ईवेंट आग नहीं करता है)। यह शायद लिपि का सबसे बड़ा पतन है।

  • आप एक कामकाजी उदाहरण here पा सकते हैं, लेकिन मोबाइल डिवाइस परीक्षण के लिए embedded version लोड करना तेज़ है।

+0

एक बहुत ही रोचक कामकाज। मुझे पहले 'इनपुट' घटना के बारे में पता नहीं था। इस तरह के विस्तृत उत्तर के लिए बहुत बहुत धन्यवाद! :-) – Pablo

+0

@ पाब्लो - आपका स्वागत है :) मैं इस मुद्दे के साथ ब्लैकबेरी पर 2 दिनों के सर्वश्रेष्ठ भाग के लिए संघर्ष कर रहा था।जब मैं इनपुट खाली होता हूं तो बैकस्पेस दबाकर उस मुद्दे को हल करने और हल करने के लिए समय मिलता है जब मैं किसी घटना को आग नहीं डालता, लेकिन मेरे वर्तमान उद्देश्यों के लिए वर्णित कार्यवाही पर्याप्त थी। –

4

परीक्षण कर रहा हूँ निम्नलिखित कोड, ठीक काम करता है। आप इसे jsfiddle पर देख सकते हैं। ब्लैकबेरी उपयोग

function captureBackButton() { 
      blackberry.system.event.onHardwareKey(blackberry.system.event.KEY_BACK, 
      function() { 
      alert('Backspace Pressed') 
      }); 
     } 

see detail

+0

यह काम नहीं करता है। मैंने पहले ही इसका परीक्षण किया है। 'कीप्रेस' नहीं, न तो 'कीपअप' या 'कीडाउन' ब्लैकबेरी सिम्युलेटर 9800 में बैकस्पेस कुंजी दबाए जाने की स्थिति को कैप्चर करता है। – Pablo

+0

मैंने कोड अपडेट किया है, और जेएसफ़िल्ड पर डेमो साझा किया है, अगर यह काम नहीं करता है, तो साझा करें आपका अधिक कोड, जो मैं देख सकता हूं। – Rab

+1

यह आपके द्वारा समझाए गए क्रोम पर काम करता है, लेकिन दुर्भाग्य से यह ब्लैकबेरी सिम्युलेटर पर काम नहीं करता है (मैंने ब्लैकबेरी ब्राउज़र से jsfiddle के लिए लिंक खोला है और यह बैकस्पेस प्रेस को कैप्चर नहीं करता है)। मैंने आपके जैसे ही एक बहुत ही सरल पृष्ठ के साथ प्रयास किया है। मैंने कोड जोड़ने के सवाल को संपादित किया है। – Pablo

1

के लिए क्रोम

$(document).ready(function() { 
$('input[type="text"]').bind('keydown', function(e){ 
    if(e.keyCode == 8) 
     alert('backspace trapped') 
    }); 
    });​ 

पर यह परीक्षण किया आप क्या कीकोड आप हैं वापस पाने को देखने के लिए इस http://jsbin.com/ezucen/13/ उपयोग कर सकते हैं। ब्लैकबेरी 9900 7.1 पर मुझे कुंजीकोड 8.

+0

मैंने आपके कोड का परीक्षण किया लेकिन दुर्भाग्य से, जैसा कि CoDe aDDict द्वारा उत्तर में पहले कोड के साथ, बैकस्पेस कुंजी दबाने से कोई भी महत्वपूर्ण घटना नहीं होती है, जैसा कि अन्य करते हैं। जब मैं उस कुंजी को दबाता हूं तो कोई कोड मुद्रित नहीं होता है। – Pablo

+0

यह केवल ब्लैकबेरी 6 है जो इस मुद्दे को लगता है। मैंने 5, 6, और 7 पर परीक्षण किया है। वर्कअराउंड के लिए मेरा जवाब देखें। –

1

सामान्य ब्राउज़र में इसे पूरा करने का कोई तरीका नहीं है।

जावास्क्रिप्ट का उपयोग वापस महत्वपूर्ण घटना को ट्रैक करने के लिए एक ही रास्ता एक विजेट/WebWorks KEY_BACK एपीआई का उपयोग कर आवेदन का उपयोग करने के लिए है।

+0

धन्यवाद, लेकिन जैसा कि मैंने पहले जवाब में जवाब दिया था, मैं वेबवर्क्स एप्लिकेशन विकसित नहीं कर रहा हूं और इसके अलावा, बैकस्पेस कुंजी मैप नहीं लगती है। – Pablo

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