2010-01-08 19 views
3

我有一个输入TextField,并且在舞台上有一个KeyboardEvent.KEY_DOWN偶数侦听器来侦听Keyboard.ENTER事件。事件监听器将输入的文本添加到数组或其他内容中,然后清除TextField。问题在于,当Enter键事件触发并且TextField值设置为“”时,它将在TextField中留下回车并且将光标定位在第二行上。 WTF?我一直在编写AS2和AS3很长一段时间,从来没有遇到过这种情况。我失去了主意吗?请帮助,人们! :-)AS3 TextField - 将值设置为“”时将不需要的回车返回

例子:

var myTextArray:Array = new Array(); 
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); 

function onKeyDown(e:KeyboardEvent):void{ 
    if(e.keyCode == Keyboard.ENTER){ 
     if(_inputText.text != null){ 
      myTextArray.push(_inputText.text); 
    } 
    _inputText.text = ""; 
    } 
} 

回答

0

如果你能够进入一个回车符,这意味着文本字段为多,是不是?

您是否尝试过在KeyboardEvent.KEY_UP事件侦听器回调函数中清空输入文本?

0

你是否在文本框中输入焦点?在这种情况下,可能会在通过键盘操作更新文本字段的值之前调用onKeyDown。您将文本字段设置为onKeyDown中的空字符串,然后闪存会为其添加一个新行。

将文本输入事件侦听器添加到文本字段并向两个事件处理程序添加跟踪语句以了解事件的顺序。

0

如果您处于Flash创作模式(在IDE中),则需要在测试时取消选中控制 - >禁用键盘快捷键。也可以尝试为KEY_UP制作一个“清理”处理程序。

0
inputfield.addEventListener(Event.CHANGE, onChange); 

private function onChange(e:Event):void { 
if (inputfield.text.charCodeAt(inputfield.text.length - 1) == 13) { 
inputfield.text = inputfield.text.substr(0, inputfield.text.length - 1); 
} 
} 
-1

这似乎是某种错误 - 我也明白。如果你只是在你的构造函数中设置了textField.text =“”,那么它似乎可以解决这个问题。

1

只需用KEY_UP替换KEY_DOWN即可。它(至少对我来说)解决了这个问题

1

使用KEY_DOWN - >您的代码 - > KEY_UP - >空场

一个例子(讨厌的代码):

Message.addEventListener(KeyboardEvent.KEY_DOWN, function(e:KeyboardEvent):void 
        { 
         if(e.keyCode == Keyboard.ENTER) 
         { 
          // Your code... 
         } 
        }); 
Message.addEventListener(KeyboardEvent.KEY_UP, function(e:KeyboardEvent):void 
         { 
          if(e.keyCode == Keyboard.ENTER) 
          { 
           Message.text = ""; 
          } 
         }); 
0

我知道这是一个很老的问题,仍然想到分享我的解决方案。我在fla文件中禁用了文本框的多行功能。之后,我没有在文本框中得到任何回车。