чередовать событие onchange в - PullRequest
14 голосов
/ 25 января 2010

Кажется действительно простой вещью, но не может понять это. Я использую событие onchange для элемента, и оно работает хорошо. Когда пользователь просматривает и выбирает файл, я получаю путь и загружаю его, используя мою собственную функцию js.

Проблема в том, что это не работает, если пользователь выбирает один и тот же файл дважды подряд, onchange не запускается (что имеет смысл, поскольку ничего не изменилось), но в моем случае для меня важно также захватить это событие , найдите путь и загрузите.

Редактировать

(аналогично Очистка с помощью jQuery , не уверен, что я должен разрешить это как дубликат)

Ответы [ 8 ]

8 голосов
/ 25 января 2010

Вы можете просто удалить ввод и создать идентичный с javascript - новый будет пустым.

(отредактированный ответ, чтобы быть прямым к сути, комментарии не имеют значения сейчас)

2 голосов
/ 25 января 2010

Вы можете сделать так, чтобы кнопка выбора файла очищала содержимое ввода по клику, таким образом, даже если они выбирают тот же файл, ваше событие все равно будет вызываться. Конечно, тогда ваш обработчик onchange должен будет проверить наличие пустых значений, но он, вероятно, должен делать что-то подобное или даже больше, если он собирается использовать это значение для загрузки файла ...

1 голос
/ 23 июля 2014

Установите значение входа "" в обратном вызове onchange. Таким образом, если тот же файл будет выбран в следующий раз, событие onchange все равно будет вызвано, поскольку значение отличается от "".

document.getElementById('files').value = "";
1 голос
/ 22 апреля 2011

Вы не можете запустить событие change во второй раз при вводе файла, но вы можете запустить событие change на промежутке. Ниже работает в Chrome и FF. Я не проверял в IE. $('#change_span').bind('change',function(){ alert($('#file_1').val()) })</p> <p>

<span id='change_span'><input id="file_1" type="file"></span>

1 голос
/ 25 января 2010

Там действительно нет никакого способа исправить это. Если вы добавите какой-либо другой прослушиватель или таймер, то вы потенциально можете загрузить файл, даже если пользователь этого не хочет (например, с помощью щелчка мышью). Вы уверены, что загрузка того же файла не может быть выполнена другим способом? Как насчет очистки ввода после начала загрузки (или замены его новым вводом, если вы не можете его очистить).

0 голосов
/ 20 сентября 2014

Если вы не хотите использовать 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; после предупреждения.

0 голосов
/ 16 июля 2011
function resetFileInput ($element) {
  var clone = $element.clone(false, false);
  $element.replaceWith(clone);
}

А затем используйте live:

$('#element_id').live('change', function(){
...
});

Хорошо сработало для меня!

0 голосов
/ 25 января 2010

Такое поведение присутствует только в IE? Если это так, это может быть связано с этой проблемой:
Событие изменения jQuery на

...