我应该使用change
或textInput
事件来捕获TextInput控件上的用户输入吗?为什么呢?
答案 0 :(得分:46)
textInput
。另一方面,change
将在用户提交的每个更改上发送。因此,例如,如果用户删除了部分文本,则仅调度change
事件。
当通过代码修改文本时,不会调度这些内容:
flash.events.TextEvent.TEXT_INPUT
:
“当用户键入,删除或粘贴文本到 控制“。
(忽略“删除”这个词 - 我刚尝试过,当用户删除文本时,此事件不调度)
“当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_INPUT
和KEY_DOWN
。