15

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

4

4 回答 4

46

textInput仅当用户在控件中输入文本时才调度。change另一方面,在用户提交的每一次更改上都会发送。因此,例如,如果用户删除了部分文本,则仅change调度事件。

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

flash.events.TextEvent.TEXT_INPUT

“当用户在控件中键入、删除或粘贴文本时调度。”

(忽略那里的“删除”一词——我刚刚尝试过,当用户删除文本时不会调度此事件)

flash.events.Event.CHANGE

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

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

于 2008-11-12T12:16:05.383 回答
3

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

根据您捕获用户输入的目的,您可以子类化 TextInput 组件并覆盖更改和 textInput 事件的内部侦听器。

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

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

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

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

于 2008-11-21T18:13:23.077 回答
0

Event.CHANGE 和 TextEvent.TEXT_INPUT 事件都会在每个键入的字符上触发。如果您想要一个仅针对给定 TextInput 字段触发一次的事件,请使用FocusEvent.FOCUS_OUT

与 Event.CHANGE 和 TextEvent.TEXT_INPUT 一样,此事件只会在用户输入时触发,而不是在以编程方式更改值时触发。

于 2011-05-19T22:22:38.533 回答
0

CHANGE虽然没有告诉你发生了什么TEXT_INPUT变化 -并且KEY_DOWN做。

于 2012-01-04T17:34:02.563 回答