AS3按钮后单击不相关的函数被调用

时间:2014-05-06 12:23:41

标签: actionscript-3 flash

我是新来的,我真的需要帮助。 在Flash项目上工作,我遇到了一个问题。我想要做的是让用户选择具有受限文件扩展名的文件,如* .png,* jpg。选择文件后,flash会在左角显示图片的一些缩略图,并将文件参考推送到新阵列,这样当点击上传按钮时,文件就会上传。项目文件为here。缩略图的排列并不是我想要的,但不是问题。

问题是当文件被选中时,gofurther会绘制缩略图,但是一旦我点击upload_btn bytesAr函数再次被调用并绘制所有选中的图像。您可以查看单击按钮之前和之后的行为here

给我这个问题的部分是:

function uplFile(e:Event):void
        {
            for (var i:Number=0; i<fileUp.length; i++)
            {
                fileUp[i].upload(loaDur);// this line
            }
        }

如果我评论上传循环文件的循环内线,那么一切都很好,但如果我离开它会调用bytesar函数,即使我给该函数的参数,也会从fileUp数据中重新绘制缩略图是file:filereferenceList,而且uplFile函数中没有bytesarr函数引用,那么如何调用它?有人可以帮忙吗?感谢

public class uplClass extends MovieClip
{
    var filter:Array = new Array(new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)","*.jpg; *.jpeg; *.gif; *.png"));
    var loaDur:URLRequest = new URLRequest(( stage.loaderInfo.parameters.f )? stage.loaderInfo.parameters.f : './upload.php');
    var file:FileReferenceList;
    var fileUp:Array = new Array();
    var numb:Number = 0;
    var track:Number = 0;
    var loadeR:Loader;
    var bitmap:Bitmap;

    public function uplClass()
    {
        file = new FileReferenceList();
        setup(file);
        select_btn.addEventListener(MouseEvent.CLICK, browse);
        //cancel_btn.addEventListener(MouseEvent.CLICK, cancel_func);
        upload_btn.addEventListener(MouseEvent.CLICK, uplFile);
        cancel_btn.visible = false;
        upload_btn.visible = false;
    }
    public function browse(e:MouseEvent)
    {
        file.browse(filter);
    }
    private function setup(file:FileReferenceList)
    {
        file.addEventListener(Event.SELECT, select_func);
    }
    private function error_func( e:IOErrorEvent )
    {
        var tf = new TextFormat();
        tf.color = 0xff0000;
        label_txt.defaultTextFormat = tf;
        label_txt.text = 'The file could not be uploaded.';
        cancel_btn.visible = false;
        select_btn.visible = true;
    }
    private function select_func( e:Event )
    {
        for each (var fileRef:FileReference in file.fileList)
        {
            fileUp.push(fileRef);
            fileRef.load();
            fileRef.addEventListener(Event.COMPLETE, bytesAr);
        }
        function bytesAr(e:Event):void
        {
            loadeR = new Loader();
            loadeR.loadBytes(e.target.data);
            loadeR.contentLoaderInfo.addEventListener(Event.COMPLETE, gofurther);
            //track++;
            //count_txt.text=file.toString()+"1 "+fileUp.toString()+" "+numb;
            //trace(file+"1 "+fileUp);
        }
    }

     function gofurther(e:Event):void
    {
        bitmap = e.target.content;
        bitmap.scaleX = 0.2;
        var thumbLoad:Sprite = new Sprite  ;
        thumbLoad.graphics.beginBitmapFill(bitmap.bitmapData,null,false,true);
        thumbLoad.graphics.drawRect(0,0,30,30);
        thumbLoad.graphics.endFill();
        thumbLoad.x = 100 * numb;
        addChild(thumbLoad);
        numb++;
        //count_txt.appendText(numb+" ");
        if (upload_btn.visible == false)
        {
            upload_btn.visible = true;
        }
    }
    function uplFile(e:Event):void
    {
        for (var i:Number=0; i<fileUp.length; i++)
        {
            fileUp[i].upload(loaDur);// if i comment this line everything is fine, but if i leave it like this it calls bytesAr function somehow
        }
    }
}

}

用于移动上传文件的PHP代码:

  

$ uploads_dir =&#39; ./ uploads /&#39;;

     

if($ _FILES [&#39; Filedata&#39;] [&#39; error&#39;] == 0){if(move_uploaded_file(   $ _FILES [&#39; Filedata上&#39;] [&#39; tmp_name的值&#39],   $ uploads_dir。$ _ FILES [&#39; Filedata&#39;] [&#39; name&#39;])){echo&#39; ok&#39;出口();     回声&#39;错误&#39 ;;出口();

1 个答案:

答案 0 :(得分:0)

fileUp.push(fileRef);
fileRef.load();
fileRef.addEventListener(Event.COMPLETE, bytesAr); // <- see this? where are you removing it?

现在查看upload()的{​​{1}}: complete:Event - 在文件上载操作成功完成时调度。

您实际上是在上传完成后触发相同的侦听器。希望它有所帮助。