0

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

我没有对 ComboBox 的外观、源代码等进行任何更改。

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

在 Flash IDE 中,一切正常。但是当我将它部署到网站并通过网络浏览器查看 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("改变", this);

这是事件处理程序本身。

函数更改(evt){ num_pages_value = Number(evt.target.selectedItem.label);}

我怀疑对 mx.events.EventDispatcher.initialize 的调用会破坏键盘交互,但没有它,我的处理程序永远不会被调用。但是这两种方法都不允许用户选择他们想要的值。选 7 得到 9,选 3 得到 6。而且每次得到的值都不相同。

4

1 回答 1

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);

我在图书馆里有标签和组合框。标签使用鼠标更改,并使用从 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,乔治

于 2009-12-31T08:09:42.447 回答