2011-11-23 7 views
10

मेरे पास एक HTML5/जावास्क्रिप्ट (सेन्चा) ऐप है जिसे मैंने एक्सकोड में आईओएस के लिए फोनगैप में पैक किया है। एक तरफ या दूसरा, मैं कीबोर्ड खोलने/बंद घटनाओं को सुनने में सक्षम होना चाहता हूं और तदनुसार कुछ करता हूं। क्या इसे करने का कोई तरीका है?जावास्क्रिप्ट/सेन्चा में कीबोर्ड खोलने/बंद करने के लिए कैसे सुनें?

+0

जब आप टेक्स्टफील्ड, टेक्स्टरेफ़िल्ड पर ध्यान केंद्रित कर रहे हों तो कीबोर्ड स्वचालित रूप से लागू हो जाएगा ...। तो आप जावास्क्रिप्ट में फोकस ईवेंट में श्रोता बना सकते हैं। – heyjii

+0

फिर, मैं यह भी सुनना चाहता हूं कि जब टेक्स्टफील्ड इत्यादि फोकस खो देते हैं, तो क्या इसके लिए कोई घटना है? – Groppe

+0

मुझे लगता है कि आप धुंध घटना – heyjii

उत्तर

8

जब आप टेक्स्टफील्ड, टेक्स्टरेफ़िल्ड पर ध्यान केंद्रित कर रहे हों तो कीबोर्ड स्वचालित रूप से लागू हो जाएगा ...। तो आप जावास्क्रिप्ट में फोकस ईवेंट में श्रोता बना सकते हैं जो कुंजीपटल खुली घटना को सुनने के समान है। इसके अलावा आप कीबोर्ड को बंद करने के लिए धुंध श्रोता का उपयोग कर सकते हैं।

धन्यवाद।

+0

मैं इसे सेटफोकस में उपयोग कर रहा हूं। inpMessage.fieldEl.dom.focus(); डिवाइस में क्रोम में इसका काम ठीक नहीं है। –

+0

ध्यान दें कि कुंजीपटल एनिमेटेड खुला होने से पहले यह आग लग जाएगा, इसलिए यदि आपको स्थिति/लेआउट समायोजन करने की आवश्यकता है तो यह बहुत जल्दी हो सकता है –

+5

आपको अपने उत्तरों पोस्ट करने से पहले अधिक परीक्षण करने की आवश्यकता है। जब आप एंड्रॉइड डिवाइस कीबोर्ड के बैक बटन पर टैप करेंगे तो छुपाया जाएगा लेकिन यह धुंधला ईवेंट ट्रिगर नहीं करेगा। – filipvkovic

1

जहां तक ​​मैं इसे देख सकता हूं, एंड्रॉइड में केवल फोनगैप के लिए बनाता है, यहां पुल अनुरोध देखें: https://github.com/phonegap/phonegap-android/issues/94

घटनाओं को hidekeyboard और showkeyboard कहा जाता है। आप जांच सकते हैं कि वे आईओएस पर भी आग लगाते हैं या नहीं।

10

मैं एक ही मुद्दे का सामना करना पड़ा है, और मुझे लगता है कि आपके मामले में सबसे अच्छा समाधान इस तरह जो देशी घटनाओं के लिए बाध्य होगा एक PhoneGap प्लगइन, उपयोग करने के लिए है:

https://github.com/driftyco/ionic-plugins-keyboard/tree/60b803617af49a10aff831099db90340e5bb654c

यह काम करता है Android और iOS के एक ही रास्ते पर महान, बस उन घटनाओं के लिए बाध्य:

window.addEventListener('native.showkeyboard', keyboardShowHandler); 

window.addEventListener('native.hidekeyboard', keyboardHideHandler); 
+0

यह एकमात्र चीज है जो काम करती है। धन्यवाद। –

2

खुला स्थिति ट्रिगर onclick या onFocus घटना का उपयोग कर आसान है, लेकिन घटना onBlur कुंजीपटल को बंद करने पर गोली चलाई नहीं है (क्योंकि कर्सर इनपुट/पाठ क्षेत्र में रहता है) । तो मुझे खिड़की की ऊंचाई का पता लगाकर समाधान मिला जो कुंजीपटल खुले/बंद पर महत्वपूर्ण रूप से बदल गया है।

यह एंड्रॉइड और आईओएस पर आधुनिक ब्राउज़रों में भी काम कर रहा है। डेमो: http://jsfiddle.net/qu1ssabq/3/

यदि आवश्यक हो तो आप उन उपकरणों के लिए अपना कोड सुधार सकते हैं जो addEventListener या innerHeight का समर्थन नहीं करते हैं - इंटरनेट पर उपलब्ध विकल्प उपलब्ध हैं।

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0, minimal-ui"> 
<title>Detect keyboard opened/closed event</title> 
</head> 
<body> 

<textarea id="txta" onclick="xfocus()" onblur="xblur()"></textarea><br> 

<span id="status" style="background: yellow; width: auto;">closed</span> 

<script type="text/javascript"> 
    function xfocus() { 
    setTimeout(function() { 
     height_old = window.innerHeight; 
     window.addEventListener('resize', xresize); 
     document.getElementById('status').innerHTML = 'opened'; // do something instead this 
    }, 500); 
    } 
    function xresize() { 
    height_new = window.innerHeight; 
    var diff = Math.abs(height_old - height_new); 
    var perc = Math.round((diff/height_old) * 100); 
    if (perc > 50) 
     xblur(); 
    } 
    function xblur() { 
    window.removeEventListener('resize', xresize); 
    document.getElementById('status').innerHTML = 'closed'; // do something instead this 
    } 
</script> 

</body> 
</html> 
संबंधित मुद्दे