Ответ 1
Вы можете просто удалить вход и создать идентичный с javascript - новый будет пустым.
(отредактированный ответ, чтобы быть прямо к точке, комментарии теперь неактуальны)
Кажется, действительно простая вещь, но она не может понять. Я использую событие onchange для элемента, и он работает хорошо. Когда пользователь просматривает и выбирает файл, я получаю путь и загружаю его с помощью моей пользовательской функции js.
Проблема в том, что это не работает, если пользователь дважды выбирает один и тот же файл, он не загорается (что имеет смысл, поскольку ничего не изменилось), но в моем случае для меня важно также зафиксировать это событие, получить путь и загрузить.
(Подобно Очистка < input type = 'file'/ > с помощью jQuery, не уверен, что я должен разрешить это как дубликат)
Вы можете просто удалить вход и создать идентичный с javascript - новый будет пустым.
(отредактированный ответ, чтобы быть прямо к точке, комментарии теперь неактуальны)
У вас может быть кнопка выбора файла, очищающая содержимое ввода onclick, таким образом, даже если они выбирают один и тот же файл, событие все равно будет срабатывать. Конечно, тогда ваш обработчик onchange должен будет проверить пустые значения, но, вероятно, он должен делать что-то подобное или больше, если он будет использовать это значение для загрузки файла...
На самом деле нет никакого способа исправить это. Если вы добавите любой другой прослушиватель или таймер, вы сможете загрузить файл, даже если пользователь этого не хочет (например, с помощью onclick). Вы уверены, что загрузка одного и того же файла не может быть выполнена по-другому? Как очистить ввод после запуска загрузки (или заменить его новым вводом, если вы не можете его очистить).
Вы не смогли запустить событие изменения во второй раз при вводе файла, но вы можете запустить событие изменения на промежутке. Ниже работает в хром и ff. Я не проверял IE.
$('#change_span').bind('change',function(){
alert($('#file_1').val())
})
<span id='change_span'><input id="file_1" type="file"></span>
Задайте значение входа "в вашем обратном вызове onchange. Таким образом, если тот же самый файл будет выбран в следующий раз, событие onchange все равно будет запущено, потому что значение отличается от".".
document.getElementById('files').value = "";
Это поведение присутствует только в IE? Если это так, это может быть связано с этой проблемой:
событие изменения jQuery в <select> не стрелять в IE
По существу: вам может потребоваться проверить onClick вместо этого.
function resetFileInput ($element) {
var clone = $element.clone(false, false);
$element.replaceWith(clone);
}
И затем используйте live:
$('#element_id').live('change', function(){
...
});
Хорошо работает для меня!
Если вы не хотите использовать jQuery
<form enctype='multipart/form-data'>
<input onchange="alert(this.value); return false;" type='file'>
<br>
<input type='submit' value='Upload'>
</form>
Он отлично работает в Firefox, но для Chrome вам нужно добавить this.value=null;
после предупреждения.