javascript - HTML 输入文件 onchange 不会为不同的文件触发第二次

标签 javascript html file-upload html-input

我见过很多关于输入文件元素不触发 onchange 的问题第二次使用相同的文件,但我的情况并非如此。我的onchange 选择不同的文件时也不会触发处理程序。

我选择了一个文件,然后如果我尝试选择另一个文件,它就不起作用了。出现文件选择对话框,我选择我的(不同的)文件,就是这样。 onchange第一次调用的处理程序不会再次调用。选择文件时没有任何反应。

这是我的 JS:

<input type="file" id="my-input" name="my-input" class="hidden" />

(在 jQuery 上): $("#my-input")[0].onchange = onSelectedFileChange;

function onSelectedFileChange(e) {
    file = e.target.files[0];
    handleFile(); //my code that processes the file, has nothing to do with the input element.
}

我也试过重新添加 onchangehandleFile方法(例如将 $("#my-input")[0].onchange = onSelectedFileChange; 复制到其中),但它似乎也不起作用。选择文件后,我的输入法是onchange属性设置为 null,即使我再次显式设置它,它也会以某种方式保持为 null。

为什么会这样?这恰好是跨浏览器的情况。

更新:这是handleFile方法:

//file is in the global scope, from the previous method
function handleFile() {
    var lowerName = file.name.toLowerCase();
    if (lowerName.endsWith('.pdf') || lowerName.endsWith('.doc') || lowerName.endsWith('.docx')) {
        $("#file-name").text(file.name);
    } else {
        file = null;
        alert('Please select a valid file')
    }
}

最佳答案

我认为这里可能还有其他问题,因为在下面的代码片段中每次选择新文件时都会出现警告框。

$("#my-input")[0].onchange = onSelectedFileChange;

function onSelectedFileChange(e) {
    file = e.target.files[0];
    alert('new file');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" id="my-input" name="my-input" class="hidden" />

handleFile() 函数是否可能第二次中断?

关于javascript - HTML 输入文件 onchange 不会为不同的文件触发第二次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42504196/

相关文章:

javascript - 客户端自动提交表单

jquery - 根据点击位置重新定位 div

javascript - 图片上传——未正确访问 PHP 文件

file-upload - 为什么我的文件没有使用 Node.js 上传到 S3

javascript - {SOAP UI} 有没有办法从项目拆卸中调用一个测试用例步骤

javascript - 为什么这个函数会超时占用大量内存

javascript - 将 json_encode($data) 转换为 div 的仅数据列表的最简单方法

html - 如何将 DIV 的高度调整为 100%?

JavaScript 在点击时获取 anchor href

html - 样式化文件上传按钮