AS3 - 在stage.focus之后输入从KeyboardEvent接收不需要的密钥的文本

时间:2012-06-06 06:55:42

标签: actionscript-3 text input

我在游戏中遇到一个相当令人沮丧的问题。

基本上这就是发生的事情:

1)我为一个字母“t”监听KeyboardEvent.KEY_DOWN。 (“t”带来团队聊天)

2)然后调用一个类使输入文本字段可见(创建时间轴)。

3)然后我将stage.focus转移到该输入文本。

除了字母“t”出现在我的输入文本字段中外,一切正常。

所以,我认为它捕获了KeyboardEvent并输入了“t”,因此我创建了一个事件监听器,在输入文本字段为stage.focus'd之后触发,通过调用inputText.text =“清除输入文本字段” “;

然而,它不起作用,而不是将其清除为“”它只留下“t”。

我实验了一些,并尝试在焦点事件后设置inputText.text =“CLEAR”。

一切奇怪的事情发生在说完了之后,输入文本字段显示“tCLEAR”,光标在t之后,当我输入更多时,它将“CLEAR”推向右边。

据我所知,任何文本字段动态或输入,如果你将其设置为“”,它应该清除它。但是在这种情况下它不是,它只是在t之后推动“”。

无论如何,我做了很多搜索,但无济于事。

我甚至尝试在TextEvent.TEXT_INPUT之后清除“”,甚至在按下“t”后删除KeyListener,仍然没有快乐。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以在event.stopImmediatePropogation()处理程序中添加KeyboardEvent.KEY_DOWN。或者,如果这样做无助于尝试使用KeyboardEvent.KEY_UP事件来捕获其处理程序中带有event.stopImmediatePropogation()的按下按钮。

修改

好吧,我不知道为什么用关键事件做到这一点非常重要。但我可以建议这个解决方案:

1)在密钥向下处理程序中将TextEvent.TEXT_INPUT侦听器添加到TextField。

2)在文本输入处理程序中添加event.preventDefault();并删除TextEvent.TEXT_INPUT侦听器。

这样的事情:

function keyDownHandler(event:KeyboardEvent):void
{
    ...
    stage.focus = tf;
    tf.addEventListener(TextEvent.TEXT_INPUT, tf_textInputHandler);

}

function tf_textInputHandler(event:TextEvent):void
{
    event.preventDefault();
    tf.removeEventListener(TextEvent.TEXT_INPUT, tf_textInputHandler);
}

tf是你的textField。