上传图片时如何传递参数?

时间:2017-05-23 09:32:51

标签: javascript jquery events closures

我的javascript代码是这样的:

for(var i=0; i < 5; i++) {        
    $('input[name="photo-'+i+'"]').change(function () {
        if (this.files && this.files[0]) {
            var reader = new FileReader();
            reader.onload = imageProducIsLoadedt;
            reader.readAsDataURL(this.files[0]);
        } 
    });
 }

function imageProducIsLoadedt(e) {
    $('#thumbnail-view-0').attr('src', e.target.result);
    document.getElementById("thumbnail-upload-0").style.display = "none"
    ...
};

例如,我点击名称= photo-3的输入文件,它将在索引3上运行循环

我要问的是:如何将参数i = 3发送到imageProducIsLoadedt函数?

我尝试添加如下参数:

reader.onload = imageProducIsLoadedt(e, i);

imageProducIsLoadedt像这样:

function imageProducIsLoadedt(e,i) {

但是,存在这样的错误:

  

未捕获的ReferenceError:未定义e

我该如何解决这个问题?

更新

我尝试像这样更新全局变量:

let test = '';
for(let i=0; i < 5; i++) {        
    $('input[name="photo-'+i+'"]').change(function () {
        test = i;
        if (this.files && this.files[0]) {
            var reader = new FileReader();
            reader.onload = imageProducIsLoadedt;
            reader.readAsDataURL(this.files[0]);
        } 
    });
 }

function imageProducIsLoadedt(e) {
    console.log(test)
    ...
};

它有效

1 个答案:

答案 0 :(得分:2)

您可以使用寄存器onload创建一个匿名函数,并在其中调用imageProducIsLoadedt函数,如下所示

   for(var i=0; i < 5; i++) {        
$('input[name="photo-'+i+'"]').change(function (e) {
    if (this.files && this.files[0]) {
        var reader = new FileReader();
        (function(i){
         reader.onload = function(){
           imageProducIsLoadedt(e,i);
         }
        });
        reader.readAsDataURL(this.files[0]);
    } 
  });
 }