从Flex TextInput控件捕获用户输入:要使用哪个事件?

时间:2008-11-12 10:17:52

标签: flex events flex3 textinput

我应该使用changetextInput事件来捕获TextInput控件上的用户输入吗?为什么呢?

4 个答案:

答案 0 :(得分:46)

仅当用户将输入文本添加到控件中时,才会调度

textInput。另一方面,change将在用户提交的每个更改上发送。因此,例如,如果用户删除了部分文本,则仅调度change事件。

当通过代码修改文本时,不会调度这些内容:

flash.events.TextEvent.TEXT_INPUT

  

“当用户键入,删除或粘贴文本到   控制“。

(忽略“删除”这个词 - 我刚尝试过,当用户删除文本时,此事件调度)

flash.events.Event.CHANGE

  

“当TextInput控件中的文本通过用户更改时调度   输入。 如果发生此事件   您使用数据绑定或ActionScript   用于更改文字的代码。“

您还可以使用valueCommit事件,该事件在用户“提交”更改时调度(通常通过将焦点从文本字段移开),但请记住,此事件也会在字段中调度值以编程方式更改。

答案 1 :(得分:3)

这是一个很好的答案,hasseg。如果我有足够的代表,我会投票。

根据您捕获用户输入的内容,您可以继承TextInput组件并覆盖change和textInput事件的内部侦听器。

我不知道你是否有很多理由想要这样做,但我最近是为了处理OS X中的一个错误而导致粘贴的换行符被表示为'\ r',而不是'\ n'。

您需要做的就是在子类对象的构造函数中调用super()之后添加以下内容:

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

然后添加侦听器方法和要执行的代码。

答案 2 :(得分:0)

对每个键入的字符触发Event.CHANGE和TextEvent.TEXT_INPUT事件。如果您希望事件仅触发给定TextInput字段的一次,请使用 FocusEvent.FOCUS_OUT

与Event.CHANGE和TextEvent.TEXT_INPUT类似,此事件仅触发用户输入,而不是对值进行编程更改。

答案 3 :(得分:0)

CHANGE并未告诉您 已更改的内容 - TEXT_INPUTKEY_DOWN