input的onchange事件第二次不执行,问题的根源在于没有发生任何改变,因为绑定的是onchange事件,如果事件的对象没有发生改变,那么事件是不会执行的。当第二次选择文件和第一次选择的文件相同的时候,input的value值是一样的,在js看来就是没有变化,里面的值跟之前还是一样。所以就出现了问题的出现。
要解决这个问题,可以在onchange事件执行完之后,清空input的value值,当第二次再选择相同的文件时,里面的value从空值变为任何值,都是一个改变的过程,所以就不会存在事件不执行的问题了。
代码示例:
let inFile = document.getElementById("inFile");
inFile.onchange = function(e) {
// 先执行事件的代码块,然后将对象本身的value值清空
inFile.value = ""; // 写法1
e.target.value = ""; // 写法2
}