2012-07-20 86 views
1

我有以下一段代碼。該字符串正在發送到uploadFile正確,但行alert(str)給我undefined將字符串傳遞給事件偵聽器給NULL

function uploadFile(str){ 
    alert(str); //prints correctly 
    var fileTag = document.getElementById('fileinput'); 
    var file = fileTag.files[0]; 
    var xmlhttp=new XMLHttpRequest(); 
    var formData = new FormData(); 
    formData.append("thefile", file); 
    xmlhttp.addEventListener("load", function(evt,str){ 
     alert(str); //undefined 
    }, false); 
    .... 
} 

我是相當新的JavaScript,所以任何人都可以告訴我爲什麼會發生這種情況?謝謝

+0

是什麼讓你認爲加載事件處理程序將接收兩個參數? – Quentin 2012-07-20 11:33:20

回答

0

的事件處理函數接收一個參數刪除str:一個event對象。

事件處理程序

function(evt,str) { } 

需要兩個參數。當然,因爲它沒有收到第二個,str,你會得到str未定義。

如果你想你的不過事件處理程序使用哪個定義爲function uploadFile(str){ }參數的str變量,你可以做到這一點,因爲EVET處理函數的uploadFile(str){ }函數中定義。這被稱爲封閉。只要改變

function(evt, str){ } 

function(evt) { } 

這樣,您刪除的str內定義,牆根外一個,在uploadFile(str)。因此,在

xmlhttp.addEventListener("load", function(evt,str){ 
    alert(str); 
}, false); 

你會真正得到字符串str的警報。

0

剛剛從函數聲明

xmlhttp.addEventListener("load", function(evt){ 
    alert(str); //alerts str 
}, false); 
相關問題