首页 > 解决方案 > fileReader.onload 不会第二次运行,即使选择了不同的文件

问题描述

document.getElementById("uploadExcel").addEventListener("click", function () {
        $("#uploadExcel").attr('disabled', true);
        $('#loader').show();
        if (selectedFile) {
            var fileReader = new FileReader();
            alert("2");
            fileReader.onload = function (event) {
                alert(event);
                var data = event.target.result;
                alert("3");
                var workbook = XLSX.read(data, {
                    type: "binary", cellDates: true, dateNF: 'mm/dd/yyyy;@'
                });
                alert("4");
                workbook.SheetNames.forEach(sheet => {
                    alert("5");
                    let rowObject = XLSX.utils.sheet_to_row_object_array(
                        workbook.Sheets[sheet]
                    );
                    let jsonObject = JSON.stringify(rowObject);
                    alert("Get Data");
                    getData(jsonObject);
                    //document.getElementById("jsonData").innerHTML = jsonObject;
                });
            };
            alert("6");
            fileReader.readAsBinaryString(selectedFile);
        } else {
            alert("error");
        }
    });

现在让我解释一下发生了什么:

页面加载,我选择要上传的文件,即使它有 excel 错误,它也会通过,它会获取文件并读取它,转换它并抛出错误。

所以我把那个excel文件改成无错误,然后再次尝试点击上传按钮,但这一次代码进入了上面的函数,它不会越过fileReader.onload = function (event)它警报“2”然后停止工作。

您能否告诉我为什么会发生这种情况以及如何在不重新加载页面的情况下避免这种情况,因为如果我重新加载页面,一切都会按预期工作。

谢谢

标签: javascriptjsonexceluser-interface

解决方案


推荐阅读