2008-11-12 13 views
15

क्या मुझे टेक्स्ट इनपुट नियंत्रण पर उपयोगकर्ता इनपुट कैप्चर करने के लिए change या textInput ईवेंट का उपयोग करना चाहिए? क्यूं कर?फ्लेक्स टेक्स्ट इनपुट नियंत्रण से उपयोगकर्ता इनपुट कैप्चर करना: किस ईवेंट का उपयोग करना है?

उत्तर

46

textInput केवल तभी प्रेषित किया जाता है जब उपयोगकर्ता इनपुट नियंत्रण में पाठ करता है। दूसरी ओर, change, उपयोगकर्ता द्वारा किए गए हर बदलाव पर प्रेषित किया जाता है। तो उदाहरण के लिए, यदि उपयोगकर्ता टेक्स्ट का एक हिस्सा हटा देता है, तो केवल change ईवेंट प्रेषित किया जाता है।

flash.events.TextEvent.TEXT_INPUT: जब पाठ कोड के माध्यम से संशोधित किया गया है

इनमें से न तो भेजा जाता है "। भेजा जब उपयोगकर्ता प्रकार, हटाता है, या चिपकाता नियंत्रण में पाठ"

(शब्द वहाँ "हटाएँ" पर ध्यान न दें - मैं सिर्फ यह कोशिश की और इस घटना नहीं भेजा है जब पाठ उपयोगकर्ता द्वारा हटा दिया जाता है)

flash.events.Event.CHANGE:

Msgstr "पाठ इनपुट नियंत्रण में पाठ उपयोगकर्ता इनपुट के माध्यम से बदलता है। यह घटना तब नहीं होती है जब आप डेटा बाइंडिंग या एक्शनस्क्रिप्टका उपयोग करते हैंकोड को बदलने के लिए कोड। "

परिवर्तन (आम तौर पर ध्यान केंद्रित पाठ क्षेत्र से दूर ले जाकर), लेकिन याद रखें कि इस घटना भी भेजा जाता है जब क्षेत्र तुम भी valueCommit घटना है, जो जब उपयोगकर्ता "करता है" भेजा जाता है का उपयोग कर सकते मूल्य प्रोग्रामेटिक रूप से बदल दिया गया है।

+2

स्पष्टीकरणपूर्ण उत्तर के लिए बहुत बहुत धन्यवाद। एक साइड नोट के रूप में: मैंने कुछ परीक्षण किया और पाया कि 'textInput' ईवेंट (' event.currentTarget.text' का उपयोग करके) ईवेंट हैंडलर में 'टेक्स्ट' प्रॉपर्टी' तक पहुंचने पर, मुझे जो मान मिलता है वह ' पाठ '_before_ कुंजीपटल जिसने घटना को ट्रिगर किया। –

+0

यह मेरे लिए सच नहीं है, कम से कम फ्लेक्स 4.5 में नहीं (मुझे लगता है कि फ्लेक्स 4 भी) स्पार्क टेक्स्ट इनपुट का उपयोग कर। मुझे परिवर्तन घटना में अंतिम पाठ मूल्य मिलता है, इससे पहले एक बदलती घटना भी भेजी जाती है। – Enrique

3

यह एक अच्छा जवाब है, हैसेग। अगर मेरे पास पर्याप्त प्रतिनिधि था, तो मैं इसे वोट दूंगा।

आप जो उपयोगकर्ता इनपुट कैप्चर कर रहे हैं उसके आधार पर, आप TextInput घटक को उपclass कर सकते हैं और परिवर्तन और टेक्स्ट इनपुट ईवेंट के लिए आंतरिक श्रोताओं को ओवरराइड कर सकते हैं।

मुझे नहीं पता कि आप ऐसा करने के कई कारण हैं या नहीं, लेकिन मैंने हाल ही में ओएस एक्स में एक बग से निपटने के लिए किया है जो चिपकने वाले लाइनों को '\ r' के रूप में प्रदर्शित करने का कारण बनता है, '\ n' के बजाए।

this.addEventListener(Event.CHANGE, textFieldChangeListener); 
this.addEventListener(TextEvent.TEXT_INPUT,textFieldInputListener); 

और फिर श्रोता तरीकों और कोड आप निष्पादित करने के लिए चाहते हैं जोड़ें:

तुम सब करने की ज़रूरत है अपने subclassed वस्तु के निर्माता में निम्नलिखित अपने सुपर के बाद() कॉल जोड़ने है।

0

दोनों ईवेंट .CHANGE और TextEvent.TEXT_INPUT ईवेंट टाइप किए गए प्रत्येक वर्ण पर ट्रिगर होते हैं। यदि आप एक ऐसा ईवेंट चाहते हैं जो किसी दिए गए टेक्स्ट इनपुट फ़ील्ड के लिए केवल एक बार ट्रिगर करेगा, तो FocusEvent.FOCUS_OUT का उपयोग करें।

ईवेंट की तरह। CHANGE और TextEvent।TEXT_INPUT, यह ईवेंट केवल उपयोगकर्ता इनपुट के लिए ट्रिगर करेगा, न कि मूल्य में प्रोग्रामेटिक परिवर्तनों के लिए। TEXT_INPUT और KEY_DOWN करते हैं -

+1

मुझे यह सबमिट करने के बाद एहसास हुआ कि FOCUS_OUT का उपयोग करना एक अच्छा दृष्टिकोण नहीं है क्योंकि, यह सच है कि यह प्रति फ़ील्ड में केवल एक बार ट्रिगर होता है, यह आपको कुछ भी बताता है कि उपयोगकर्ता ने मूल्य बदल दिया है या नहीं। – hrabinowitz

+0

तो ऐसा लगता है कि उपरोक्त हैसग नोट्स के रूप में, यह परिवर्तन टेक्स्ट इनपुट क्षेत्र में उपयोगकर्ता परिवर्तनों को सुनने के लिए सबसे अच्छा विकल्प है। हालांकि, यदि उपयोगकर्ता फ़ील्ड मान की प्रतिलिपि बनाने के लिए नियंत्रण-सी टाइप करता है, तो यह एक परिवर्तन ईवेंट भी ट्रिगर करेगा। – hrabinowitz

0

CHANGE does not तुम क्या हालांकि बदल गया है बताओ।

+0

यदि आप किसी चीज़ के अंतिम परिणाम का उपयोग करने की आवश्यकता है, तो आप परिवर्तन ईवेंट को संसाधित करते समय टेक्स्ट इनपुट से पाठ की संपूर्णता को पकड़ सकते हैं। –

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