Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Динамическое создание формы загрузки файлов (https://javascript.ru/forum/css-html/5483-dinamicheskoe-sozdanie-formy-zagruzki-fajjlov.html)

arma 18.10.2009 02:47

Динамическое создание формы загрузки файлов
 
Приветствую!
Мне надо создать форму загрузки файлов с нуля.
Делаю так:

fform=document.createElement("FORM");
fform.id="form"+count;
fform.name="form"+count;
fform.enctype="multipart/form-data";
fform.method="post";

input=document.createElement("input");
input.type="file";
fform.action="fileupload.php";
input.name='file';
fform.appendChild(input);


Везде (опера, ff, сафари, итд) работает как надо. НО вот в ИЕ не хочет работать!
Просмотрев "ие средствами разработки" дерево, я был удивлён, т.к. вместа
<input name="file" ...
там стоит
<input propdescname="file" ...
...
Такой же propdescname стоит и в тэге формы.
В гугле слово "propdescname" выдаёт пару японских сайтов :)
Т.е. файл даже не отсылается, т.к. имени нет...
Пять часов я потратил на поиск решения (скорее всего лоховсой) проблеммы, но так ничего и не нашол.

ps: document.createElement('<INPUT name="file">') тож не катит. Визуально выглядит норм, на деле х_р! Не постятся файлики (массив $HTTP_POST_FILES["file"] пустой, а вот $_POST["file"] кажит имя файла)
:help:

Octane 18.10.2009 03:42

Да, в IE проблемно менять свойства type и name, попробуйте:
input.setAttribute("name", "file");

Еще в IE можно элементы создавать следующим образом:
var input = document.createElement('<input type="file" name="file" />');

Хотя подобное и в других браузерах легко реализуется с помощью innerHTML:
function createElement(htmlCode) {
	var node = document.createElement("div");
	node.innerHTML = htmlCode;
	return node.firstChild;
}
var input = createElement("<…>");

arma 18.10.2009 03:57

input.setAttribute("name", "file");
var input = document.createElement('<input type="file" name="file" />');

Фсё пробывал.
сэтатрибут срабатывает хорошо, крэйт элемент с именем тож. Только толку! Файл то не постится! Проблема даже может быть не в имени. Так как сэт атрибут имя и тип делает хорошо, но вот пост проходит как-то не так, файл сам не передаётся... $HTTP_POST_FILES["file"] пустой! ИЕ почему-то решает что надо передавать не файл, а имя файла. Что видно если в аплоадфайлс.пхп сделать следующее:
print_r($HTTP_POST_FILES["file"]);
$_POST["file"];

в первой строке пусто, во фторой почему-то имя файла с полным локальным путём.
А вот если в готовую форму вставлять импут, то всё работает.
Кароче я повешусь.

Octane 18.10.2009 04:35

Разве не массив $_FILES[] нужно использовать? $HTTP_POST_FILES вроде бы deprecated.

arma 18.10.2009 15:23

Для данного вопроса разници между ними нет. Факт что в осле не работает, а в других работает, следовательно проблема не в пхп

arma 18.10.2009 15:52

так. Иа лошаро! проблема решается
fform.setAttribute('enctype','multipart/form-data');
вместа
fform.enctype="multipart/form-data";
. Тогда осёл правильно понимает тип формы, иначе класифицирует её как текст.
Всем спасибо :)

x-yuri 18.10.2009 23:35

это на самом деле только часть правды. Изначально (ie 6, 7) атрибуту enctype соответствовало свойство encoding (причем setAttribute('encoding'... тоже работает) и через enctype ничего поменять было нельзя. А в ie 8 появилась возможность изменять атрибут enctype

arma 19.10.2009 00:01

Уважаемый x-yuri, где ж вы раньше были :)
в любом случае спасибо, не знал. :yes:


Часовой пояс GMT +3, время: 18:43.