Если вы клонируете элемент input[type=file]
, значение клона пуст. Вы также не можете копировать значение из одного файла в другой.
Я никогда не пробовал переместить файл с одного документа на другой после выбора файла. Я хотел бы думать, что браузер очистит выбор, когда вы это сделаете, но это может быть и так. (Update:.. Тестируемый три браузера, все они сохранил значения, к моему удивлению, смотрите ниже)
Фундаментально, если вы хотите использовать отдельные формы для загрузки файлов по отдельности, вы хотите входы в отдельных формах для начала, до пользователь делает свой выбор. Но, видимо, вы можете их перемещать, что позволит вам делать то, что вы хотите сделать. Я все же, вероятно, начну с отдельных форм, чтобы избежать их перемещения.
Интересно, что Chrome, Firefox, и IE10, по крайней мере, кажется, совершенно счастлив двигаться файл элемента с его выбора нетронутым, даже в другой документ: Live Example | Source
HTML:
<input id="theFile" type="file">
<br>Choose a file above, then either:
<br><input type="button" id="btnClone" value="Clone">
<input type="button" id="btnMove" value="Move to iframe">
<br>
<iframe id="theFrame" style="width: 99%"></iframe>
JavaScript:
(function() {
gid("btnClone").onclick = function() {
display("Here's the clone:");
document.body.appendChild(gid("theFile").cloneNode(true));
};
gid("btnMove").onclick = function() {
gid("theFrame").contentDocument.body.appendChild(gid("theFile"));
display("File input moved to the iframe");
};
function gid(id) {
return document.getElementById(id);
}
function display(msg) {
var p = document.createElement('p');
p.innerHTML = String(msg);
document.body.appendChild(p);
}
})();
С выше, если я выбираю что-то и нажмите Переместить в IFrame кнопки ввода перемещается, по-видимому, без изменений. (Cloning очищает значение, как ожидалось.)
Возможно, это случай для [новых файлов API] (https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications)? – Charles
@Charles: Это будет, когда IE8 и 9 мертвы. :-) http://caniuse.com/#feat=fileapi –
@ T.J.Crowder, человек, путь к дождю на моем параде. Может быть, поклялся, что это было в IE9 по крайней мере. – Charles