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

标签 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 相当陌生,所以有人能告诉我为什么会发生这种情况吗?谢谢

最佳答案

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

您的事件处理程序

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/

相关文章:

javascript - 如何在模态窗口中显示 pdf?

php - 单击链接而不刷新页面时将数据发送到数据库

javascript - 如何在javascript中输入小数

javascript - AngularJS - 指令不起作用

javascript - Vue slot 在 slot v-if 语句开始之前加载异步组件

javascript - 将 xmlhttp javascript 转换为 jquery

javascript - 在父 DIV 的鼠标移出时隐藏子元素 - AngularJs

javascript - 使用moment.js获取上一个工作日

javascript - Tabrisjs 无法建立连接 package.json 文件

javascript - 与多个状态变量 react 的通用函数