我有一个项目,我需要在更改组合框值之前向用户弹出警报。 此功能允许用户在未保存修改时保持当前状态。这意味着用户可以取消更改。
我有一个子类ComboBox并试图挂钩ComboBox.dropdown的ITEM_CLICK,但是在更改值后会触发此事件。另外,我尝试了MOUSE_CLICK和MOUSE_DOWN但没有成功。
在我的代码中,我在CustomComboBox中添加了一个“preChange”事件。应在更改之前触发此事件。另外,我引入了一个名为commitChange的方法,该方法将被手动调用以实际提交更改。
如何达到预期效果?
答案 0 :(得分:0)
我就是这样做的:
<?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>
希望这有帮助。
答案 1 :(得分:0)
基本上我在更改之前需要一个事件。我想现在的想法就是......
我确实修改了你的代码,以便在发生更改时触发preChange事件,停止事件传播,并且只有在实际更改后才触发CHANGE事件..
感谢您的快速回答。
答案 2 :(得分:0)
最简单的方法是在ComboBox上向Event.CHANGE添加两个侦听器,然后将要更改之前的处理程序的优先级设置为负值。例如:
myComboBox.addEventListener(Event.CHANGE, preChange, false, -100);
myComboBox.addEventListener(Event.CHANGE, postChange, false, 100);
事件调度的顺序: