Я создаю сайт, на котором пользователи могут загружать изображения. Я не хочу использовать Flash-плагин, такой как SWFUpload или Uploadify, но я бы хотел, чтобы они могли загружать сразу несколько изображений. Это привело бы меня к использованию ввода файла с набором атрибутов multiple=""
. Проблема заключается в том, что пользователь может выбирать только несколько изображений из одного и того же каталога на своем компьютере.Перемещение элементов ввода файлов с помощью jQuery
Чтобы противостоять этому, у меня возникла идея, связанная с Javascript. У меня есть файл ввода на моей странице с набором атрибутов multiple
, и когда пользователь выбирает некоторые файлы с этим вводом файла, я затем скрываю его с помощью CSS. После этого я использую Javascript для размещения нового файла на своем месте, который пользователь может использовать для загрузки большего количества файлов из разных каталогов. Таким образом, когда у пользователя есть все изображения, которые они хотят загрузить, у меня есть форма с несколькими отправляемыми файлами, которые я могу обрабатывать с помощью PHP в качестве моего бэкэнд.
Это мое отношение разметки:
<div id="select_images">
<input type="file" name="files[]" multiple="multiple" />
</div>
И мой Javascript (с использованием библиотеки JQuery):
$('#select_images input:first').change(function(){
// User selected some images to upload, hide this file input
$(this).css('right', '-10000px');
// Place a new file input to take its place
$(this).before('<input type="file" name="files[]" multiple="multiple" />');
});
На данный момент, если выбрать несколько изображений для загрузки, JQuery правильно скрывает текущий вход в файл и помещает новый, где был старый. Таким образом, разметка выглядит следующим образом:
<div id="select_images">
<input type="file" multiple="multiple" name="files[]">
<input type="file" multiple="multiple" name="files[]" style="right: -10000px;">
</div>
Здесь проблемы. Если я выбираю больше файлов для загрузки с использованием нового ввода файла, который был помещен в jQuery, ничего не происходит. Ввод нового файла, вставленный с помощью jQuery, похоже, не принимает этот файл, поскольку Firebug не показывает никаких файлов данных, относящихся к входу. Есть ли какая-то система безопасности, мешающая мне помещать файлы в вставку ввода в DOM с помощью Javascript?
Спасибо!
Если я делаю 'print_r()' на скрипте, на который отправляется форум, он корректно показывает файлы. Должна быть проблема Firebug, что она ничего не показывала в инспекторе DOM :) – John
Однако есть еще одна проблема. Кажется, я не вижу ничего, кроме 1 файла. Если я попытаюсь создать другой, используя мой Javascript-код выше, он не будет создан. Это подтверждается Firebug и отправкой моих данных формы. – John
Поскольку вы не добавляете какое-либо событие на вновь созданный вход. Взгляните на это: http://jsfiddle.net/b9xWM/ - он не использует свойство «multiple», но в противном случае делает то, что вам нужно. –