Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.10.2009, 02:47
Аспирант
Отправить личное сообщение для arma Посмотреть профиль Найти все сообщения от arma
 
Регистрация: 18.10.2009
Сообщений: 50

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

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"] кажит имя файла)

Последний раз редактировалось arma, 18.10.2009 в 03:23.
Ответить с цитированием
  #2 (permalink)  
Старый 18.10.2009, 03:42
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Да, в 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("<…>");

Последний раз редактировалось Octane, 18.10.2009 в 03:45.
Ответить с цитированием
  #3 (permalink)  
Старый 18.10.2009, 03:57
Аспирант
Отправить личное сообщение для arma Посмотреть профиль Найти все сообщения от arma
 
Регистрация: 18.10.2009
Сообщений: 50

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"];

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

Последний раз редактировалось arma, 18.10.2009 в 04:00.
Ответить с цитированием
  #4 (permalink)  
Старый 18.10.2009, 04:35
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Разве не массив $_FILES[] нужно использовать? $HTTP_POST_FILES вроде бы deprecated.
Ответить с цитированием
  #5 (permalink)  
Старый 18.10.2009, 15:23
Аспирант
Отправить личное сообщение для arma Посмотреть профиль Найти все сообщения от arma
 
Регистрация: 18.10.2009
Сообщений: 50

Для данного вопроса разници между ними нет. Факт что в осле не работает, а в других работает, следовательно проблема не в пхп
Ответить с цитированием
  #6 (permalink)  
Старый 18.10.2009, 15:52
Аспирант
Отправить личное сообщение для arma Посмотреть профиль Найти все сообщения от arma
 
Регистрация: 18.10.2009
Сообщений: 50

так. Иа лошаро! проблема решается
fform.setAttribute('enctype','multipart/form-data');
вместа
fform.enctype="multipart/form-data";
. Тогда осёл правильно понимает тип формы, иначе класифицирует её как текст.
Всем спасибо
Ответить с цитированием
  #7 (permalink)  
Старый 18.10.2009, 23:35
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

это на самом деле только часть правды. Изначально (ie 6, 7) атрибуту enctype соответствовало свойство encoding (причем setAttribute('encoding'... тоже работает) и через enctype ничего поменять было нельзя. А в ie 8 появилась возможность изменять атрибут enctype
Ответить с цитированием
  #8 (permalink)  
Старый 19.10.2009, 00:01
Аспирант
Отправить личное сообщение для arma Посмотреть профиль Найти все сообщения от arma
 
Регистрация: 18.10.2009
Сообщений: 50

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Индиептор загрузки файлов С СЕРВЕРА! GrishinEV Events/DOM/Window 12 01.12.2011 14:05
Динамическое создание панелек dagster Элементы интерфейса 2 07.08.2009 12:49
динамическое создание тадлицы magistr_bender Элементы интерфейса 14 23.07.2009 17:36
Динамическое создание script src RaiDeR Общие вопросы Javascript 11 22.04.2009 17:04
Помогите с индикатором загрузки файлов Ролан Общие вопросы Javascript 1 17.01.2009 08:14