如何将Focus_out事件应用于不仅仅是选定的组件

| 我正在根据这篇文章使用代码。 它使用focus_out事件来检测是否存在需要提交的更改。但是,我注意到只有在您从文本字段中但在组件内部单击时,才调用FOCUS_OUT事件。有什么方法可以侦听组件内部的单击?
    addEventListener(FocusEvent.FOCUS_OUT, onFocusOut);

    protected function onFocusOut(event:FocusEvent):void
    {
        _updatedText = text;

        if(_updatedText != _originalText){
            dispatchEvent(new Event(Event.CHANGE));
        }

        setEditable(false);
    }
    
已邀请:
在组件本身中,您可以执行以下操作:
systemManager.addEventListener( FocusEvent.KEY_FOCUS_CHANGE, focusChangeHandler );
systemManager.addEventListener( FocusEvent.MOUSE_FOCUS_CHANGE, focusChangeHandler );
只需确保在从舞台上删除组件之前(假设它是动态添加的)就清理并删除了事件侦听器。这将阻止您堆积一堆事件侦听器。 另外,如果您只想找出有人在特定组件之外单击的时间,则可以执行以下操作:
systemManager.addEventListener( MouseEvent.MOUSE_DOWN, system_mouseDownHandler );

private function system_mouseDownHandler( event:MouseEvent ):void {
  if( !event.target != this && !this.contains(event.target as DisplayObject) ){
    // Do Something Here
  }
}
同样,如果动态添加/删除了该组件,请确保清除所有事件侦听器。 希望这可以帮助! 编辑: 如果要清理eventListener,请执行以下操作(在组件中触发remove事件时调用):
<mx:Component remove=\"myRemoveHandler();\" />

private function myRemoveHandler():void {
  if( systemManager.hasEventListener( MouseEvent.MOUSE_DOWN ) systemManager.removeEventListener( MouseEvent.MOUSE_DOWN, system_mouseDownHandler );
}
显然用您最终使用的事件侦听器代替(焦点或鼠标)。     
在LabelEditor类中,分派出一个Event.CHANGE事件,您可以只监听该事件     

要回复问题请先登录注册