【发布时间】:2017-07-19 03:43:27
【问题描述】:
我看到很多关于输入文件元素第二次使用相同文件未触发onchange 事件的问题,但我的情况并非如此。 My onchange handler is not trigerred when a different file is selected too.
我选择了一个文件,然后如果我尝试选择另一个文件,它就不起作用了。文件选择对话框出现,我选择我的(不同的)文件,就是这样。第一次调用的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.
}
我也尝试在handleFile 方法中重新添加onchange(例如将$("#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')
}
}
【问题讨论】:
-
使用 jQuery 的边注绑定事件:
$("#my-input").on('change', onSelectedFileChange) -
你能显示
handleFile()的代码吗? -
我已经运行了你的代码和 alert(file.name);很好地打印并触发每个更改的文件的事件。请显示您的 handleFile() 脚本。
-
@sayingu 我已将其添加到问题中。
-
@Can Poyrazoğlu 您的代码在我的测试中运行良好。什么时候不工作?
标签: javascript html file-upload html-input