问一个关于Alert.CANCEL的问题

Tony8002003 2010-03-22 08:45:19
页面中有多个comboBox和一个DataGrid,当改变DataGrid里的信息时,再重新选择comboBox某条信息时,给出:数据有改变,是否保存的提示,这个OK了,但当选择的是CANCEL时,虽然页面没有发生变化,但所选的comboBox内容却改变了,所以我想问的就是,如何能在选CANCEL时,使每个comboBox都能保持原值不变?在线等了。
...全文
119 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
syeia 2010-03-22
  • 打赏
  • 举报
回复
<mx:ComboBox id="cb" click="fun()" dataProvider="{comboDataProvider}" change="comboChangeHandler(event)"/>
syeia 2010-03-22
  • 打赏
  • 举报
回复



<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.CloseEvent;
import mx.controls.Alert;
[Bindable]
private var comboDataProvider:ArrayCollection = new ArrayCollection(['A','B','C','D']);
private var isUpdate:Boolean = false;
var index:int=0;
private function changeHandler(event:Event):void{
isUpdate = true;
}
private function comboChangeHandler(event:Event):void
{

Alert.show("数据有改变,是否保存?" + index.toString(), "提示", Alert.OK | Alert.CANCEL, null, function(e:CloseEvent):void
{
dd(e, event)
});
}

private function dd(evt:CloseEvent, event:Event):void
{
if (evt.detail == Alert.OK)
{
//
}
else if (evt.detail == Alert.CANCEL)
{ cb.selectedIndex=index;
}
}

private function fun():void
{
index=cb.selectedIndex;
}
]]>
</mx:Script>
<mx:ComboBox id="cb" click="fun()" dataProvider="{comboDataProvider}" click="comboChangeHandler(event)"/>
<mx:TextInput id="ti" text="Hello World" change="changeHandler(event)"/>
</mx:Application>
Tony8002003 2010-03-22
  • 打赏
  • 举报
回复
恩,楼上说的对,但我的提示按钮有三个,即yes no cancel,如果是在click上操作的话,当选择的no时,现无法做到提出来的选择,所以还是要在change事件里写,像你说的,用一个控件保存值,然后做一些其它的操作,先谢谢你了
OnlyLau 2010-03-22
  • 打赏
  • 举报
回复

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.CloseEvent;
import mx.controls.Alert;
[Bindable]
private var comboDataProvider:ArrayCollection = new ArrayCollection(['A','B','C','D']);
private var isUpdate:Boolean = false;
private function changeHandler(event:Event):void{
isUpdate = true;
}
private function comboChangeHandler(event:Event):void{
if(isUpdate){
Alert.show("数据有改变,是否保存?","提示",Alert.OK|Alert.CANCEL,null,function(evt:CloseEvent):void{
if(evt.detail == Alert.OK){
isUpdate = false;
}else if(evt.detail == Alert.CANCEL){
trace(evt.cancelable);
evt.preventDefault();
}
});
}
}
]]>
</mx:Script>
<mx:ComboBox id="cb" dataProvider="{comboDataProvider}" click="comboChangeHandler(event)"/>
<mx:TextInput id="ti" text="Hello World" change="changeHandler(event)"/>
</mx:Application>


首先,如果ComboBox用的是change事件监听的话,可能不行,因为触发该事件的时候数据已经改变了,由于change事件的cancelable为false所以事件不可以取消,所以也就不好变回去了,除非用第三方变量保存该ComboBox原来的值,然后在change事件触发中判断如果你的DataGrid修改了,且选择CANCEL了,则将原来的值再赋给该ComboBox

而我的这个例子用的是click事件,也就是你点击该ComboBox的时候我就给你提示
OnlyLau 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xuhuanchao 的回复:]

取消时候,调用preventDefault();
[/Quote]
关键是change事件是不能取消的,可以通过event.cancelable的值判断的
水中影子 2010-03-22
  • 打赏
  • 举报
回复
取消时候,调用preventDefault();

4,327

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计 Flex
社区管理员
  • Flex
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧