HTML: скопировать поля формы в другую форму, включая поле ввода FILE?

Я пришел к выводу, что значение поля ввода файла формы не может быть установлено с помощью JavaScript из соображений безопасности.

Я просто хочу скопировать вход FILE в другую форму и опубликовать его, я искал обходной путь и ничего не смог найти, возможно ли это?

ОБНОВЛЕНИЕ: мой код:

function prepareUpload( filevalue ){

document.getElementById('logo').value =filevalue;
var mform = document.getElementById('sleeker');
    ajaxUpload( mform,'<?php echo base_url(); ?>'); // a methods to upload...
}

<input class="input-file-upload" type="file" size="20" name="logodummy" id="logodummy" onchange="prepareUpload( this.value );" />

<form action="" method="post" name="sleeker" id="sleeker" enctype="multipart/form-data" onbeforesubmit="return false;">
            <p><input type="hidden" name="logo" id="logo" /></p>
        </form>

Все остальное, что вводится в файл, работает нормально, и я могу получить с помощью $ _POST, но $ _FILES не имеет значений. И только этот код работает нормально. Я думаю этого коэффициента достаточно?

Ответы на вопрос(5)

Я не проверял это подробно, но, похоже, он работает в Firefox.

использованиеcloneNode

var copy = file_input.cloneNode(1);
form2.appendChild(copy);
 hectorct01 дек. 2013 г., 21:33
Это не работает в Chrome 31

Очень похоже на cloneNode, за исключением jQuery

В браузере xulrunner (например, firefox) я успешно использовал что-то вроде следующего:

$('input:file').clone().appendTo($('#mainform'));

Это должно скопировать все входные объекты файла в форму с id = mainform.

Избегайте использования атрибута id в клонируемых объектах. Идентификаторы всегда должны быть уникальными.

 hectorct01 дек. 2013 г., 21:35
Это не работает в Chrome 31. Значение нового ввода пусто.

Я понял, что это может быть поздно для вечеринки, но с HTML5 вы можете использовать атрибут "form", чтобы нацеливать на форму, например [form id = "the_form"] ... [/ form] .... [ форма ввода = "the_form type =" file "... /]

 user526014321 дек. 2015 г., 12:44
Вы можете изменить jsFiddle? Я не понимаю ваш ответ :-(
Решение Вопроса

Да, вы можете разместить<input type="file"> за пределами формы HTML, а затем используйтеonChange событие, чтобы заполнить<input type="hidden"> в форме, которая публикуется:

<input type="file" 
       onchange="document.getElementById('hidden_file').value = this.value;" />

<form method="POST">
    <input type="hidden" id="hidden_file" value="" />
    <input type="submit" />
</form>

Однако в современных браузерах вы сможете получить доступ только к имени файла, а не к полному пути. Вы можете проверить следующие сообщения переполнения стека для получения дополнительной информации по этой теме:

Не удается получить полный адрес при загрузке файлаКак получить путь к файлу из формы ввода HTML в Firefox 3

ОБНОВИТЬ:

Исходный вопрос заставил меня подумать, что вам нужно всего лишь скопировать «имя файла» в другую HTML-форму, а не всю<input type="file"> представление.

В дополнение к обновлению, я предполагаю, что вы имели в виду что-то вроде этого:

<input type="file" 
       onchange="document.getElementById('hidden_file').value = this.value;" />

<form method="POST">
    <input type="file" id="hidden_file" value="" />
    <input type="submit" />
</form>

К сожалению, выше не работает. Firefox вернется"Security error code: 1000" если вы попробуете приведенный выше пример.

Что касается некоторых обходных путей, вы можете захотеть проверитьДэвид Дорвардпредложения:

С помощьюcloneNodeПеремещение поля ввода сappendChild перед отправкой формы
 pMan10 февр. 2010 г., 11:17
Извините за задержку, так как это было очень срочно, я сделал это с двумя формами. Но здесь есть два решения. Спасибо Дэниелу и Дэвиду.
 Daniel Vassallo08 февр. 2010 г., 15:16
@David. Да, ты прав. Я проголосовал за ваши предложения и сослался на них в своем ответе, так как он все еще на высоте. Из-за первоначального вопроса перед обновлением казалось, что OP пытается скопировать только имя файла, а не все поле.
 pMan08 февр. 2010 г., 10:53
Спасибо, куча, Даниэль. Это блестящая идея. Теперь проблема в том, что ни одно из значений не доступно на стороне сервера, то есть загруженный массив пуст (имя, размер, имя tmp и т. Д. Не имеет значений в FireFox 3.1). Зачем? - Apache httpd сервер с PHP.
 pMan08 февр. 2010 г., 14:03
Смотрите обновления
 Quentin08 февр. 2010 г., 14:10
Другая вещь, которую вы не сможете увидеть, скопируете ли вы значение входного файла в скрытый вход ... это файл!
 Daniel Vassallo08 февр. 2010 г., 11:13
@pMan: Можно ли обновить ваш вопрос небольшим фрагментом из HTML и PHP?

Вы можете переместить файл ввода в другую форму (с appendChild или insertBefore), отправить форму, а затем переместить ее обратно.

Ваш ответ на вопрос