将字符串传递给事件监听器给出NULL

时间:2012-07-20 11:31:57

标签: javascript

我有以下代码。该字符串正在正确发送到uploadFile,但是alert(str)行给了我undefined

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很新,所以有人能告诉我为什么会这样吗?谢谢

2 个答案:

答案 0 :(得分:0)

从功能声明

中删除str
xmlhttp.addEventListener("load", function(evt){
     alert(str); //alerts str
}, false);

答案 1 :(得分:0)

事件处理函数接收单个参数:event对象。

您的事件处理程序

function(evt,str) { }

需要两个参数。当然,因为它没有收到第二个str,所以你得到str未定义。

如果您希望事件处理程序使用str变量(定义为function uploadFile(str){ }的参数),则可以这样做,因为evet处理函数是在{{1}内定义的功能。这称为闭包。只需改变

uploadFile(str){ }

function(evt, str){ }

通过这种方式,您可以删除function(evt) { } 中隐藏外部内容的str的内部定义。所以在

uploadFile(str)

您将真正收到字符串xmlhttp.addEventListener("load", function(evt,str){ alert(str); }, false); 的提醒。