javascript - FileUpload 复制文件

标签 javascript jquery html file-upload

我正在做一个简单的测试,只是尝试上传一个文件,将其转换为无符号 8 数组,然后将其记录到控制台

我的代码运行完美,但每次我按下按钮上传文件时,控制台都会递增地重复输出,让我解释一下:

第一次点击控制台显示 1 个输出

在第二次点击时,控制台显示重复的 2 个输出

在第三次点击时,控制台显示 3 个重复的输出

等等……

你能帮我找出错误吗?我的代码是:

<button type="button" class="btn btn-primary" id="bid_uploadPicture">Subir Imagen</button>
<input type="file" id="file" style="display:none;" />
jQuery(function ($) {

    $("#bid_uploadPicture").click(function () {
        event.preventDefault();
        document.getElementById("file").click();

        var fr = new FileReader();
        $("#file").change(function () {
            fr.onload = imageIsLoaded;
            fr.readAsArrayBuffer(this.files[0]);
        });
    });
});

function imageIsLoaded(e) {
    data = new Uint8Array(e.target.result)
    console.log(e.target.result);
}

最佳答案

每次单击按钮时,都会附加一个新的 .change 事件。这意味着它们加起来;两次点击 = 两个监听器等待文件更改。

只需将 .change 事件移动到 .click 事件之外,如 this fiddle :

jQuery(function($) {

  $("#bid_uploadPicture").click(function() {
    event.preventDefault();
    document.getElementById("file").click();
  });

  var fr = new FileReader();
  $("#file").change(function() {
    fr.onload = imageIsLoaded;
    fr.readAsArrayBuffer(this.files[0]);
  });
});

function imageIsLoaded(e) {
  data = new Uint8Array(e.target.result)
  console.log(e.target.result);
}

关于javascript - FileUpload 复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57519372/

相关文章:

javascript - React.js - 正确从 API 加载单个帖子数据

javascript - 何时分离文件以节省带宽

javascript - Uib-tabset - http 成功时更改

javascript - 添加加载更多帖子按钮

javascript - jQuery DataTables - 在 Bootstrap 3 面板内会导致搜索框和页码位置错误

html - 如何在较大元素旁边顶部对齐较小的内联 block 元素?

javascript - 使用 css/html/javascript 将微笑转化为悲伤

javascript - 如何阻止Javascript间隔函数重新启动?

javascript - 我可以自定义 WebPack 插入的 'script' 标签吗?

javascript - React-Redux 更改值的状态不会反射(reflect)在更改上