Захват закрытия окна просмотра файла с помощью JavaScript

Я использую infile, чтобы попросить пользователей просмотреть файл на своей машине. Есть ли способ поймать, если окно закрыто без выбора файла?
Например, если щелкнут x.

<input type="file" name="data" id="inFile" size="15" style="display:none" onchange="handleFiles(this)"/>

Спасибо

Ответ 1

Что я сделал:  Начните таймер после того, как пользователь откроет окно, и в этой временной функции я проверяю каждые 0,5 секунды, если файл был выбран с помощью boolean var. Я останавливаю таймер, как только пользователь выбирает файл или имеет место HTML5 DnD. Надеюсь, это поможет кому-то.

<div id="uploader"><input type="file" name="data" id="inFile" size="15" style="display:none" onchange="handleFiles(this)"/></div>

<button dojoType="dijit.form.Button" id="fileSelect" type="button" onmouseup="browse();">Browse</button> 

var fileselected = false;
function handleFiles(input){
    fileselected = true;
//use input
}

var interval;
function browse(){
    fileselected = false;
    var fileElem = document.getElementById("inFile");
    fileElem.click();
    interval = setInterval(setdiv, 500);

}
function setdiv(){
    if(!fileselected){  
        //do staff until user decides to Dnd or  browse for file again
        clearInterval(interval);
    }   
}

Ответ 2

С помощью решения из события выбора входного файла HTML, не стреляющего при выборе того же файла, я думаю, вы можете использовать это:

<input type="file" name="data" id="inFile" />
var fileElem = document.getElementById("inFile");
var fileSelected = null;
fileElem.onclick = function(e) {
    fileSelected = this.value;
    this.value = null;
});
/* or use this in your browse() function:
    fileElem.value = null;
*/
fileElem.onchange = function(e) { // will trigger each time
    handleFileDialog(this.value === fileSelected);
};

function handleFileDialog(changed) {
    // boolean parameter if the value has changed (new select) or not (canceled)
}

Ответ 3

Я думаю, что событие blur сделает это:

<input
  type="file"
  onchange="changed=true; handleFiles(this)"
  onblur="if(!changed) alert('nothing selected'); changed=false;"
/>