我在我的 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。而且每次得到的值都不相同。