Flash ComboBox组件在Web浏览器中选择了错误的值(在IDE中正常工作)

时间:2009-07-31 15:05:28

标签: flash actionscript combobox actionscript-2 cs3

我在CS3(AS2)项目中添加了一个标准的Flash ComboBox组件。它是我的一个图书馆符号的一部分,不是在舞台上创建的。

我没有对ComboBox的皮肤,源代码等进行任何更改。

当用户点击ComboBox时,列表会下拉,用户使用鼠标选择一个项目,该项目将传递给作用于该项目的代码。

在Flash IDE中,一切正常。但是,当我将其部署到WebSite并通过Web浏览器查看Flash页面时,当用户单击下拉列表中的值时,将选择一个不同的值并显示在输入框中。 (我在MAC上使用Firefox 3.0.12,但我们的QA在其他浏览器和版本中看到了问题)。同样不正确的值也会传递给我的更改事件回调。

Flash Player 9和10的问题很明显。

我尝试了两种方法从ComboBox中获取值。

a)直接访问组件以获得选择。使用此方法时,如果用户使用键盘直接选择值或类型,则可在IDE和浏览器中使用。只有鼠标选择失败。

   var num_pages_value:Number = Number(num_pages.num_pages_cb.selectedItem["data"]);

b)使用事件处理程序。使用此方法时,对ComboBox的键盘访问停止工作。以下是我设置事件处理程序的方法:

var cb:ComboBox = num_pages.num_pages_cb;

//没有mx.events.EventDispatcher.initialize,更改事件永远不会被激活!!!
 //不在文档中看起来很难找到这个......  mx.events.EventDispatcher.initialize(cb);  cb.addEventListener(“更改”,这个);

这是事件处理程序本身。

功能改变(evt){   num_pages_value = Number(evt.target.selectedItem.label);  }

我怀疑对mx.events.EventDispatcher.initialize的调用是打破键盘交互的原因,但如果没有它,我的处理程序永远不会被调用。但这两种方法都不允许用户选择他们想要的值。选择一个7,你得到9,选择一个3,然后得到6.你得到的价值每次都不一样。

1 个答案:

答案 0 :(得分:0)

我正在尝试重新创建这个问题。

到目前为止,一项简单的测试对我有用。

这是我的代码:

import mx.controls.ComboBox;
import mx.controls.Label;

var cb:ComboBox = this.createClassObject(ComboBox,'cb',0);
for(var i:Number = 0 ; i < 10 ; i++) cb.addItem({label:'item'+(i+1)});

var l:Label = this.createClassObject(Label,'l',1,{_x:cb.width,text:'selection'});

var listener:Object = new Object();
listener.change = function(event:Object):Void{
 l.text = cb.selectedItem.label;
}
cb.addEventListener('change',listener);

我在库中有Label和ComboBox。 使用鼠标使用CS3中默认生成的HTML文件更改标签。

对于这个测试,我使用了:

  • Flash Player 10,0,32,18调试程序
  • Mac OS 10.5.6
  • Firefox 3.5.6(Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10.5; EN-US; rv:1.9.1.6)Gecko / 20091201 Firefox / 3.5.6 GTB6)

HTH, 乔治