मैं सिर्फ इस झुंझलाहट के खिलाफ आए हैं, और जवाब के लिए मेरे खोज में यह सवाल पाया, इसलिए यहाँ मेरी जांच और समाधान (अच्छी तरह से, वैकल्पिक हल) के विवरण हैं।
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 लोड करना तेज़ है।
इस उत्तर शायद क्या आप चाहते हैं: http://stackoverflow.com/questions/942037/how-do-i-detect-the-delete-key-in-my-field-subclass – Kannika
लिंक के लिए धन्यवाद, लेकिन मैं जो चाहता हूं वह जावास्क्रिप्ट का उपयोग करके ईवेंट को कैप्चर करना है, क्योंकि मैं ब्लैकबेरी के लिए मूल एप्लिकेशन प्रोग्राम नहीं कर रहा हूं। मेरे मामले में, बैकस्पेस कुंजी दबाकर किसी भी ईवेंट को नहीं चलाया जाता है ('keypress' नहीं, न तो' keydown' या 'keyup')। – Pablo