var getObjectURL = function(file) {
var url = null;
if (window.createObjectURL != undefined) { // basic
url = window.createObjectURL(file);
} else if (window.URL != undefined) { // mozilla(firefox)
url = window.URL.createObjectURL(file);
} else if (window.webkitURL != undefined) { // webkit or chrome
url = window.webkitURL.createObjectURL(file);
}
return url;
}
for (let i = 0; i < fileList.length; i++) {
qrcode.decode(getObjectURL(fileList[i]));
(function(i){
qrcode.callback = function(imgMsg) {
console.log(i)
console.log(imgMsg)
}
})(i)
}
上面的代码是一段二维码的解析,循环解析fileList数组里面的二维码文件并打印解析后的内容,这些都没有问题。主要是想问一下,我用 (function(i){})(i) 保护了变量 i ,所以应该按顺序打印出 0,1,2,3,4(假设数组长度为5),可是最后的结果是 4,4,4,4,4?不知道是什么原因,哪位大佬能给解释一下吗?
你试下,在 for 循环里面重新定义一个变量接收 i 值,比如 var j = i; 然后打印 j
试了一下,还是不行
for (let i = 0; i < fileList.length; i++) {
qrcode.decode(getObjectURL(fileList[i]));
(function(i){
//qrcode.callback = function(imgMsg) {
console.log(i)
//console.log(imgMsg)
//}
})(i);
}
代码按照上面的做注释,然后就会得到你想要的0,1,2,3,4 的结果。
这样的情况我知道能按照预想的结果打印出来,只是不知道为什么放在那个函数里面就不行了,
@小潇洒: 因为代码不全,不好更进一步说。
@西南偏北:
<input type="file" name="file" id="doc" multiple="multiple" onchange="javascript:setImagePreviews();" accept="image/*" />
<script src="reqrcode.js"></script>
var getObjectURL = function(file) {
var url = null;
if (window.createObjectURL != undefined) { // basic
url = window.createObjectURL(file);
} else if (window.URL != undefined) { // mozilla(firefox)
url = window.URL.createObjectURL(file);
} else if (window.webkitURL != undefined) { // webkit or chrome
url = window.webkitURL.createObjectURL(file);
}
return url;
}
var list;
function setImagePreviews(avalue) {
list = [];
var docObj = document.getElementById("doc");
var fileList = docObj.files;
for (var i = 0; i < fileList.length; i++) {
(function(i){
qrcode.decode(getObjectURL(fileList[i]));
qrcode.callback = function(imgMsg) {
console.log(i)
list.push(imgMsg);
}
})(i)
}
return true
}
以上基本上就是完整的代码,引入reqrcode.js解析二维码图片,用一个input标签用来上传二维码图片,然后解析这些文件
没什么问题啊
在上面我回复@西南偏北的时候有贴出完整代码,你可以试一下,如果我上传五张二维码图片,那里打印出来的每次都是 4 。不知道为什么