如何捕获文本控件的文本更改事件以调用Flex 3中的函数

时间:2010-12-05 22:24:58

标签: flex events

我是flex的新手,无法捕获文本控件的文本更改事件:

<mx:Text id="description" 
             text="" 
             textAlign="center" 
             fontSize="18" 
             click="_playSpeech()"   />

现在是一个点击,但我需要它像textChange =“_ playSpeech()”所以每次该控件的文本发生变化时都会调用该函数。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

如果您正在观察用户在文本框中输入的更改,则应使用 TextArea或TextInput 类代替 Text 。这允许您收听如下更改:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <fx:Script>
        <![CDATA[


            protected function onTextChangeHandler(event:Event):void
            {
                trace("text has changed")
            }

        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>


    <mx:TextArea id="description" 
             text="text to change goes here ..." 
             textAlign="center" 
             fontSize="18" 
             change="onTextChangeHandler(event)"   />

</s:Application>

如果要更改文本框外的文本,我建议您创建一个可绑定变量或一个触发您想要发生的操作的函数。

答案 1 :(得分:1)

您需要注册更改事件(请注意我使用的是TextInput而非Text):

<mx:TextInput id="description" text="" fontSize="18" change="_playSpeach()"/>

答案 2 :(得分:1)

在代码中执行此操作的简单方法是将文本更新包装到函数中:

        protected function updateDescription(text:String):void
        {
            description.text=text;
            _playSearch();
        }

然后始终调用函数而不是立即更改文本字段。还可以防止不必要的事件使用。