2011-08-11 86 views
0

這是我第一次使用動作腳本。我看到一個flash程序員正在使用它。因爲我知道JavaScript我能夠在行動腳本中工作。使用browse()和選擇文件後,flash filereference選擇事件不會觸發

我正在爲我的php項目創建一個文件上傳組件。 直到現在我已經使用FileReference API顯示文件對話框。 選擇事件不會爲我開火。我沒有得到任何錯誤。

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

}           

該文件說,文件引用應該只在鼠標或鍵盤事件期間被調用。

我在上面的代碼中缺少什麼?

+0

這應該可以工作,但是你必須檢查'trace(「selected」);'的輸出,因爲你的點擊事件和選擇事件將同時發生,所以你的按鈕的標籤不會改變。 – TheDarkIn1978

+0

我創建了一個框架fla,並將您的代碼複製到我的fla(刪除了代碼中的新Button()部分,並在組件面板中添加了一個按鈕並將其命名爲myButton),並且所有按預期工作! – pkyeck

回答

1

您發佈的示例適用於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事件。
+0

我今天面臨的另一個問題是我使用trace(Capabilities.version)...輸出窗口正在持續填充版本不停止......此腳本像循環電影控制一樣重複倒帶。我在myButton.lable行下面包含了代碼。 –

+1

聽起來像時間線有許多幀,這將導致代碼被重複調用。確保時間軸只有一幀。 –

+0

是的。究竟。我正要提到這一點。現在它正在工作。 –

0

IT就像用戶所說:lukevanin在他的回答的評論部分。我也發現一樣。問題是我在時間軸上有很多幀。因爲我剛剛接觸動作腳本,而在F9之間切換時我正在嘗試F5,所以它創建了幀並且它在這之間不斷循環。