我在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.你得到的价值每次都不一样。
答案 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文件更改标签。
对于这个测试,我使用了:
HTH, 乔治