Apache flex Flex组合框预更改事件

Apache flex Flex组合框预更改事件,apache-flex,events,combobox,Apache Flex,Events,Combobox,我有一个项目,在更改combobox值之前,我需要向用户弹出一个警报。 如果未保存修改,此功能允许用户保持当前状态。这意味着用户将能够取消更改 我对ComboBox进行了子分类,并尝试通过单击ComboBox.dropdown来钩住项目,但此事件是在更改值后触发的。另外,我也尝试过鼠标点击和鼠标按下,但没有成功 在我的代码中,我向CustomComboBox添加了一个“preChange”事件。在进行更改之前,应触发此事件。此外,我还引入了一个名为commitChange的方法,该方法将被手动调

我有一个项目,在更改combobox值之前,我需要向用户弹出一个警报。 如果未保存修改,此功能允许用户保持当前状态。这意味着用户将能够取消更改

我对ComboBox进行了子分类,并尝试通过单击ComboBox.dropdown来钩住项目,但此事件是在更改值后触发的。另外,我也尝试过鼠标点击和鼠标按下,但没有成功

在我的代码中,我向CustomComboBox添加了一个“preChange”事件。在进行更改之前,应触发此事件。此外,我还引入了一个名为commitChange的方法,该方法将被手动调用以实际提交更改


如何才能达到预期的效果?

我就是这样做的:

<?xml version="1.0" encoding="utf-8"?>
<mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="onComplete();">
    <mx:Script>
        <![CDATA[
            import mx.events.CloseEvent;
            import mx.controls.Alert;
            import mx.events.ListEvent;
            private function onComplete():void {
                addEventListener(ListEvent.CHANGE, onChange);
                persistLastIndex();
            }

            private var _lastIndex:Number = 0;

            private function persistLastIndex():void {
                _lastIndex = selectedIndex;
            }

            private function onChange(event:ListEvent):void {
                Alert.show("Are you sure you want to change the selection?", "", Alert.YES|Alert.NO, null, onAlertClicked);
            }

            private function onAlertClicked(event:CloseEvent):void {
                if ( event.detail == Alert.NO ) {
                    selectedIndex = _lastIndex;
                } else {
                    _lastIndex = selectedIndex;
                }
            }

        ]]>
    </mx:Script>
</mx:ComboBox>

并称之为:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    xmlns:rad="uk.co.rad.*">
    <rad:MyComboBox>
        <rad:dataProvider>
            <mx:Array>
                <mx:Object data="1" label="Value 1" />
                <mx:Object data="2" label="Value 2" />
            </mx:Array>
        </rad:dataProvider>
    </rad:MyComboBox>
</mx:Application>


希望这能有所帮助。

基本上,在做出更改之前,我需要一个活动。我想现在就这样吧,我想

我确实修改了您的代码,使其在发生更改时触发预更改事件,停止事件传播,并且只有在真正进行更改后才触发更改事件


感谢您的及时回答。

最简单的方法是在组合框的Event.CHANGE中添加两个侦听器,然后将更改之前要触发的处理程序的优先级设置为负值。例如:

myComboBox.addEventListener(Event.CHANGE, preChange, false, -100);
myComboBox.addEventListener(Event.CHANGE, postChange, false, 100);
事件调度的顺序:

  • 变更前(事件:事件)
  • 继承的更改事件(默认优先级自动为0)
  • 变更后(事件:事件)

  • 标签什么时候开始有图像了?凉的