Динамическое создание формы загрузки файлов
Приветствую!
Мне надо создать форму загрузки файлов с нуля. Делаю так: 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, время: 18:43. |