代码之家  ›  专栏  ›  技术社区  ›  Paul Chernoch

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

  •  0
  • Paul Chernoch  · 技术社区  · 15 年前

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

    我没有对组合框的外观、源代码等做任何更改。

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

    在flashide中,一切正常。但是,当我将其部署到网站并通过web浏览器查看Flash页面时,当用户单击下拉列表中的值时,会选择一个不同的值并显示在“输入”框中。(我在MAC上使用Firefox3.0.12,但我们的QA在其他浏览器和版本中发现了问题)。同样的错误值也被传递到我的更改事件回调。

    这个问题对于flashplayer9和10来说是显而易见的。

    我尝试了两种方法从组合框中获取值。

    a) 直接访问组件以获取选择。在使用这种方法时,如果用户使用键盘直接选择数值或键入数字,则可以在IDE和浏览器中工作。只有鼠标选择失败。

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

    b) 使用事件处理程序。使用这种方法时,对组合框的键盘访问将停止工作。下面是我如何设置事件处理程序:

    var cb:ComboBox=num_pages.num_pages_cb页;

    //没有mx.events.EventDispatcher事件调度器.initialize,从不触发更改事件!!!
    mx.events.EventDispatcher事件调度器.初始化(cb); cb.addEventListener公司(“变更”,本);

    这是事件处理程序本身。

    功能改变(evt){ num\u pages\u value=数字(evt.target.selectedItem.标签);

    我怀疑mx.events.EventDispatcher事件调度器.initialize会中断键盘交互,但没有它,就永远不会调用我的处理程序。但是这两种方法都不允许用户选择他们想要的值。选7得到9,选3得到6。你每次得到的价值也不一样。

    1 回复  |  直到 15 年前
        1
  •  0
  •   George Profenza    15 年前

    我正试图重现这个问题。

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

    我的代码是:

    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;英特尔Mac OS X 10.5; en-US;rv:1.9.1.6)壁虎/20091201 Firefox/3.5.6(GTB6)

    嗯, 乔治