Actionscript 3 使用browse()和选择文件后未触发flash filereference选择事件

Actionscript 3 使用browse()和选择文件后未触发flash filereference选择事件,actionscript-3,file-upload,Actionscript 3,File Upload,这是我第一次使用动作脚本。我见过一个flash程序员使用它。因为我知道javascript,所以我能够在动作脚本中工作 我正在为我的php项目创建一个文件上传组件。 到目前为止,我已经使用FileReference api高级显示了文件对话框。 select事件没有为我触发。我没有得到任何错误 import fl.controls.Button; import flash.events.* import flash.net.FileReference var fr:FileReference

这是我第一次使用动作脚本。我见过一个flash程序员使用它。因为我知道javascript,所以我能够在动作脚本中工作

我正在为我的php项目创建一个文件上传组件。 到目前为止,我已经使用FileReference api高级显示了文件对话框。 select事件没有为我触发。我没有得到任何错误

import fl.controls.Button;
import flash.events.*
import flash.net.FileReference

var fr:FileReference = new FileReference();
fr.addEventListener(Event.SELECT,sico);
var myButton:Button = new Button();
addChild(myButton); 

myButton.label = "Click Me";

myButton.addEventListener(MouseEvent.CLICK, function(e:MouseEvent)
{
    myButton.label  = "clicked";
    fr.browse();
    trace('clicked');
})

function sico(event:Event):void
{
//var file:FileReference = FileReference(e.target);
myButton.label = "selected";
trace('selected');
//trace("progressHandler: name=" + file.name + " bytesLoaded=" + e.bytesLoaded + " bytesTotal=" + e.bytesTotal);

}                                           
文档中说,文件引用只能在鼠标或键盘之类的事件中调用


上面的代码中我遗漏了什么?

您发布的示例适用于Flash CS5和Flash Player 10.3,这意味着问题不在于代码

该问题的其他潜在原因可能是:

  • 您正在使用的Flash Player版本太旧。FileReference需要Flash Player 9或更高版本。右键单击Flash Player或使用
    trace(Capabilities.version)
    查看版本号
  • 应用程序的另一部分使用FileReference方法(例如:FileReference.browse()、FileReference.upload()、FileReference.download()、FileReference.load()、FileReference.save())。Flash player 10+一次只允许一个文件操作
  • 如果您使用的是Mac,那么FileReference只能在SWF在浏览器中运行时发送SELECT事件

这就像用户在回答的评论部分所说的:卢克文。我也发现了同样的情况。问题是我在时间轴上有很多帧。由于我在F9之间切换时不熟悉动作脚本,所以我尝试了F5,这样它就创建了帧,并且在帧之间不断循环。

这应该可以工作,但您必须检查
跟踪(“选定”)的输出由于您的单击事件和选择事件将同时发生,因此您的按钮标签不会出现更改。我创建了一个单帧fla,并将您的代码复制到我的fla中(删除了代码中的新按钮()部分,并从组件面板中添加了一个按钮,并将其命名为myButton),所有操作均按预期进行!我今天面临的另一个问题是我使用了跟踪(Capabilities.version)。。。输出窗口正在使用版本持续不停地填充。。。这个脚本像循环电影控件一样一次又一次地倒带。我在myButton.lable行下面包含了代码。听起来时间线有很多帧,这会导致代码被重复调用。确保时间线只有一个帧。是。确切地我正要提到那件事。现在它正在工作。