我有一个输入TextField,并且在舞台上有一个KeyboardEvent.KEY_DOWN偶数监听器来监听Keyboard.ENTER事件。事件侦听器将输入的文本添加到数组或其他任何内容,然后清除TextField。问题是当Enter键事件触发并且TextField值设置为“”时,它在TextField中留下一个回车符,并且光标位于第二行。 WTF?我一直在编写AS2和AS3编码很长时间,之前从未遇到过这种情况。我失去了理智吗?请大家帮忙! : - )
示例:
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 :(得分:1)
只需用KEY_UP替换KEY_DOWN即可。它解决了问题(至少对我而言)
答案 1 :(得分: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 = "";
}
});
答案 2 :(得分:0)
如果您能够输入回车符,则表示TextField是多行的,不是吗?
您是否尝试在KeyboardEvent.KEY_UP
事件侦听器回调函数中清空输入文本?
答案 3 :(得分:0)
您是否正在点击输入文字字段?在这种情况下,可能是在键盘操作更新文本字段的值之前调用onKeyDown
。您在onKeyDown
中将文本字段设置为空字符串,然后flash为其添加一个新行。
向文本字段添加文本输入事件侦听器,并将跟踪语句添加到两个事件处理程序,以了解事件的顺序。
答案 4 :(得分:0)
如果您处于Flash创作模式(在IDE中),则需要取消选中Control - >测试时禁用键盘快捷键。还可以尝试为KEY_UP
制作一个“清理”处理程序。
答案 5 :(得分: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);
}
}
答案 6 :(得分:0)
我知道这是一个非常古老的问题,仍然想到分享我的解决方案。我在fla文件中禁用了文本框的多行功能。之后,我没有在文本框中收到任何回车。
答案 7 :(得分:-1)
这似乎是某种错误 - 我也明白了。如果你只是在构造函数中设置textField.text =“”(或者在任何地方)它似乎解决了这个问题。