[原创]FlashMX中ComboBox对Tab键响应change事件异常之问题的发现与解决

问题描述:
项目使用FlashMX作为前台开发,后台使用JavaServlet,通过XML传递数据的。其中A画面中有一个ComboBox实例,该组件每次改变后都要求画面重新计算,同时为方便客户键盘操作,项目中所有ComboBox实例在focusIn时均自动调用open方法展开下拉。问题是,每次focusIn后使用上下键控制选项,选中后直接Tab键提交,此时,ComboBox中的选择内容变化了,但却非常遗憾并未触发change事件。
演示代码(异常):
新建一个FlashDocument文档,拖入ComboBox组件,并命名为cmb1,用于测试;拖入一个TextArea并命名为txt1,用于记录log信息;在第一帧加入:
this.cmb1.addEventListener("focusIn", this);
this.cmb1.addEventListener("change",this);
function change(evt){
 this.txt1.text = this.cmb1.selectedIndex + " has been selected./r" +  this.txt1.text;
}
function focusIn(evt) {
 this.cmb1.open();
}
Ctrl+F10发布,通过html文件测试,焦点进入cmb1后下拉打开,上下键变化选择项后直接按Tab键后发现选项改变了,但txt1中并无log(change事件未被触发)。
 
解决方法:
将代码作如下修改:
/***************************
* 杨国清@上海
* 2005/06/21
***************************/
setComboBoxStyle(this.cmb1);
this.cmb1.addEventListener("change",this);
function change(evt){
 this.txt1.text = this.cmb1.selectedIndex + " has been selected./r" +  this.txt1.text;
 _menIndex = this.cmb1.selectedIndex;
}
function setComboBoxStyle(objBox:Object):Void {
 var objListener : Object = new Object();
 objBox.addEventListener("focusIn",objListener);
 objBox.addEventListener("change",objListener);
 objBox.addEventListener("focusOut",objListener);
 objListener.focusIn = function(evt) {
  evt.target.open();
  objListener["memSelected"] = evt.target.selectedIndex;
 }
 objListener.change = function(evt) {
  objListener["memSelected"] = evt.target.selectedIndex;
 }
 objListener.focusOut = function(evt) {
  if(evt.target.selectedIndex != objListener["memSelected"]){
   evt.target.dispatchEvent({type:"change",target:evt.target});
  }
 }
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值