есть такая проблема. Вот такой блок:
<a href="#" onclick="loadPicture()">
<div class="load-picture">
<input type="file" id="picture" style="display: none">
</div>
</a>
И вот такой скрипт к нему:
var picture = document.getElementById("picture");
if (picture) {
picture.click();
}
var form = new FormData(),
up_file = picture.files[0];
form.append("upfile", up_file);
form.append("action", "load_description_image");
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
var imgText = '\n[img]' + this.responseText + '[/img]\n';
document.getElementById('description').value += imgText;
}
};
xhttp.open("POST", "start", true);
xhttp.send(form);
При нажатии на ссылку, я скриптом кликаю по файлпикеру, но проблема в том, что скрипт идёт дальше, не дожидаясь окончания диалогового окна выбора файла. Грубо говоря, запрос на сервер идёт ещё до того, как я выбрал этот файл. Как эту проблему можно пофиксить?
Вызывайте отправку формы после того, как файл изменится
var picture = document.getElementById('picture')
picture.addEventListener('change', function (e) {
// код отправки формы
})
После отправки формы нужно занулить значение picture
picture.value = null
чтобы была возможность отправить повторно файл с таким же именем, в противном случае событие change не сгенерируется
Сборка персонального компьютера от Artline: умный выбор для современных пользователей