A little research shows that it is impossible to detect when “Cancel” is selected in the “File Selection” dialog box. You can use onchange or onblur to check if files were selected or something added to the value input.
It might look like this: https://jsfiddle.net/Twisty/j18td9cs/
HTML
<form> Select File: <input type="file" name="test1" id="testFile" /> <button type="reset" id="pseudoCancel"> Cancel </button> </form>
Javascript
var inputElement = document.getElementById("testFile"); var cancelButton = document.getElementById("pseudoCancel"); var numFiles = 0; inputElement.onclick = function(event) { var target = event.target || event.srcElement; console.log(target, "clicked."); console.log(event); if (target.value.length == 0) { console.log("Suspect Cancel was hit, no files selected."); cancelButton.onclick(); } else { console.log("File selected: ", target.value); numFiles = target.files.length; } } inputElement.onchange = function(event) { var target = event.target || event.srcElement; console.log(target, "changed."); console.log(event); if (target.value.length == 0) { console.log("Suspect Cancel was hit, no files selected."); if (numFiles == target.files.length) { cancelButton.onclick(); } } else { console.log("File selected: ", target.value); numFiles = target.files.length; } } inputElement.onblur = function(event) { var target = event.target || event.srcElement; console.log(target, "changed."); console.log(event); if (target.value.length == 0) { console.log("Suspect Cancel was hit, no files selected."); if (numFiles == target.files.length) { cancelButton.onclick(); } } else { console.log("File selected: ", target.value); numFiles = target.files.length; } } cancelButton.onclick = function(event) { console.log("Pseudo Cancel button clicked."); }
I suggest making your own cancel or reset button, which resets the form or clears the value from the input.
source share