我有以下代码。字符串已正确发送到 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 相当陌生,所以有人能告诉我为什么会发生这种情况吗?谢谢
最佳答案
事件处理函数接收一个参数:一个事件
对象。
您的事件处理程序
function(evt,str) { }
需要两个参数。当然,由于它没有收到第二个 str
,因此您会发现 str
未定义。
如果您希望事件处理程序使用定义为 function uploadFile(str){ }
参数的 str
变量,您可以这样做,因为 evet 处理函数是在 uploadFile(str){ }
函数内定义的。这称为闭包。只需更改
function(evt, str){ }
至
function(evt) { }
这样,您就可以在 uploadFile(str)
中删除 str
的内部定义,从而隐藏外部定义。所以在
xmlhttp.addEventListener("load", function(evt,str){
alert(str);
}, false);
你真的会得到字符串str
的警报。
关于javascript - 将字符串传递给事件监听器并给出 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11578476/