gpt4 book ai didi

javascript - 需要从附加到 onload 事件的函数返回一个变量

转载 作者:行者123 更新时间:2023-12-02 15:18:42 25 4
gpt4 key购买 nike

这是根据实际情况虚构的示例。出于我的目的,我需要返回分配给在 onload 事件处理程序内初始化的变量的值。它返回未定义。有没有办法返回变量?

在这种情况下,我需要从 usefile 函数返回元素变量。我如何管理它。

<html>

<body>
<input type='file' id='up' accept='image/*' >
<script>
function fileread(e){
if(window.FileReader && window.File && window.FileList){

var file=e.target.files[0];
var getElement=usefile(file);
console.log(getElement); // prints 'undefined'

}
}
function usefile(file){
var reader=new FileReader();
reader.onload=function(e){
var element=getRandomElement();
return element; // need to return it and assign it to getElement variable inside fileread function
}
}
function getRandomElement(){
var arr=[1,2,3];
return arr[2]; // a random value for experiment purpose
}
document.getElementById('up').addEventListener('change',fileread,false);

</script>
</body>
</html>

最佳答案

当您同步执行所有操作时,返回值才有效。您的情况中的异步部分来自读取文件所需的延迟。因此,您为其提供一个函数,该函数在读取文件后被调用。

这意味着您还需要构建代码,以便稍后调用读取文件后必须执行的部分。因此,您还需要将该逻辑移至回调中。

简而言之,使用回调。这是一种方法...

function fileread(e) {
if (window.FileReader && window.File && window.FileList) {

var file = e.target.files[0];
var getElement = usefile(file, function() {
console.log(getElement); // does not print 'undefined'
});
}
}

function usefile(file, callback) {
var reader = new FileReader();
reader.onload = function(e) {
var element = getRandomElement();
callback(element);
}
}

function getRandomElement() {
var arr = [1, 2, 3];
return arr[2]; // a random value for experiment purpose
}
document.getElementById('up').addEventListener('change', fileread, false);
<input type='file' id='up' accept='image/*'>

关于javascript - 需要从附加到 onload 事件的函数返回一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34253965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com