Динамическое создание формы загрузки файлов
Приветствую!
Мне надо создать форму загрузки файлов с нуля. Делаю так:
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: |
Да, в 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("<…>");
|
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"]; в первой строке пусто, во фторой почему-то имя файла с полным локальным путём. А вот если в готовую форму вставлять импут, то всё работает. Кароче я повешусь. |
Разве не массив $_FILES[] нужно использовать? $HTTP_POST_FILES вроде бы deprecated.
|
Для данного вопроса разници между ними нет. Факт что в осле не работает, а в других работает, следовательно проблема не в пхп
|
так. Иа лошаро! проблема решается
fform.setAttribute('enctype','multipart/form-data');
вместа fform.enctype="multipart/form-data";. Тогда осёл правильно понимает тип формы, иначе класифицирует её как текст. Всем спасибо :) |
это на самом деле только часть правды. Изначально (ie 6, 7) атрибуту enctype соответствовало свойство encoding (причем setAttribute('encoding'... тоже работает) и через enctype ничего поменять было нельзя. А в ie 8 появилась возможность изменять атрибут enctype
|
Уважаемый x-yuri, где ж вы раньше были :)
в любом случае спасибо, не знал. :yes: |
| Часовой пояс GMT +3, время: 07:46. |