Apache flex 在FLEX中,如何防止触发警报的控件捕捉到我的警报时停止ENTER键?

Apache flex 在FLEX中,如何防止触发警报的控件捕捉到我的警报时停止ENTER键?,apache-flex,events,event-handling,key,Apache Flex,Events,Event Handling,Key,我遇到一个问题,当用户点击ENTER键时,我会显示一条AlertBox消息,焦点在文本区域。弹出窗口工作正常,但当用户点击enter时,警报按预期关闭,但TextArea侦听器从警报接收到enter事件并再次弹出对话框。我已经尝试了很多方法来抓住并吃掉这个事件,但到目前为止我还不走运。有没有办法做到这一点 public function init():void { myTextInput.addEventListener(KeyboardEvent.KEY_UP, handleKeySt

我遇到一个问题,当用户点击ENTER键时,我会显示一条AlertBox消息,焦点在文本区域。弹出窗口工作正常,但当用户点击enter时,警报按预期关闭,但TextArea侦听器从警报接收到enter事件并再次弹出对话框。我已经尝试了很多方法来抓住并吃掉这个事件,但到目前为止我还不走运。有没有办法做到这一点

public function init():void
{
    myTextInput.addEventListener(KeyboardEvent.KEY_UP, handleKeyStrokes);
}

public function handleKeyStrokes(evt:KeyboardEvent):void
{
    if(evt.keyCode == Keyboard.ENTER)
    {
        myAlert = Alert.show("This is a test and only a test", "Title", 4, null, alertCallBack);
    }
}

<mx:TextInput id="myTextInput"
              left="600" top="10">

</mx:TextInput>
公共函数init():void
{
myTextInput.addEventListener(KeyboardEvent.KEY_UP,handleKeyStrokes);
}
公共函数handleKeyStrokes(evt:KeyboardEvent):无效
{
if(evt.keyCode==Keyboard.ENTER)
{
myAlert=Alert.show(“这是一个测试,只是一个测试”,“标题”,4,null,alertCallBack);
}
}

显示警报时,请删除文本侦听器。在警报关闭时向警报添加一个侦听器,并在该关闭侦听器中重新添加文本侦听器。

尝试
事件。stopImmediatePropagation
事件。preventDefault

调用警报的CloseEvent后,似乎会调度一个带有文本框目标的键盘事件(如果使用enter键关闭警报)

为了解决这个问题,我确实像前面提到的海报一样,在显示警报之前删除了事件侦听器,但是没有立即在CloseEvent函数中添加侦听器,而是将其包装在250ms超时中。虽然这是一个糟糕的解决方案,但它起到了作用

wEmail.removeEventListener(KeyboardEvent.KEY_UP, AddEmail);
Alert.show(
    "Email '" + wEmail.text + "' is not valid", 
    "Invalid Email", 
    Alert.OK, 
    Sprite(parentApplication), 
    function(e:CloseEvent):void {
        //must delay adding because a second Keyboard.ENTER is
        //dispatched after this function if enter was used to close Alert
        setTimeout(function():void {
            wEmail.addEventListener(KeyboardEvent.KEY_UP, AddEmail);
        }, 250);
    }, 
    null, 
    Alert.OK
);

我尝试在执行警报之前删除侦听器。在警报的回调函数中显示并添加侦听器,当我执行此操作时,事件仍然达到handleKeyStrokes。另一个奇怪的行为是,我尝试为警报添加一个KEY\u UP EventListener以捕获ENTER键,但它似乎不会触发。我应该吗t?未尝试preventDefault,但尝试stopImmediatePropagation,但未成功。我正在努力解决的关键问题是,警报源有一个正在查找ENTER键的事件侦听器,因此不知何故,我需要在警报点停止事件,或者能够分辨在cont中执行的ENTER键之间的差异rol和ENTER在警报中完成。我看到的奇怪的事情是,如果我在警报中添加一个KEY_UP侦听器,当我点击ENTER时,它不会触发。作为测试,我在AlertBox和TextField中都添加了一个KEY_UP和KEY_DOWN侦听器。当我在文本字段中以焦点点击ENTER,然后在警报弹出后再次输入时,nu为mber表示事件阶段。文本输入3按键下降警报3按键上升警报3按键下降文本输入3按键上升