Захват закрытия окна просмотра файла с помощью 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;"
/>