Cancel event on input type=“file”

前端 未结 4 1431
北恋
北恋 2020-12-03 06:56

I am working with a standard file input for uploads, and I am looking for a way to attach a function to an event when the user clicks/hits enter on the \"cancel\" button (or

4条回答
  •  日久生厌
    2020-12-03 07:38

    A bit of research indicates that there is no way to detect when Cancel is selected in the File Selection dialog window. You can use onchange or onblur to check if files have been selected or if something has been added to the input value.

    This could look like: https://jsfiddle.net/Twisty/j18td9cs/

    HTML

    Select File:

    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 that resets the form or clears the value from the input.

提交回复
热议问题