Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.10.2008, 23:13
Новичок на форуме
Отправить личное сообщение для brazilius Посмотреть профиль Найти все сообщения от brazilius
 
Регистрация: 12.10.2008
Сообщений: 2

подскажите не считают ли некоторые браузеры такой код опасным
Всем привет.
Функцию написал для добавления любого количества полей для выбора файлов к форме заказа. Поле можно добавить нажав на ссылку и автоматически после выбора файла, если все созданные поля для выбора файла непустые
Уже пару недель она работает.
Тестил форму с этим js на основных браузерах: ie6,ie7, opera , ff но все-таки не покидает смутное чувство что ошибки все-таки есть что часть клиентов пугаются ошибок и уходят с сайта. буду очень признателен если развеете мои сомнения или укажите на ошибки.
var file_added=1;
var files=new Array();
function add_file(used)
{
//определяем первый элемент file
for (i=0;i<1000;i++)
	   {
	   if (document.forms[0].elements[i].id=="firstfile") {var offset=i;  break;}
	   }

	   // ищем пустые поля для выбора файлов
       var temp=true;
	   for (i=0;i<file_added;i++)
	   {
	   if (document.forms[0].elements[i+offset].value.length) temp= temp && true 
	   else temp=false;
	   //alert(document.forms[0].elements[i+6].value.length);
	   }
	   // если добавили поле для файла с помощью ссылки или поля для ввода закончились делаем новое
	  if (temp|| !used)
	  {
	  var d = document.getElementById('fileDiv');
	  var tr=document.createElement('tr');
	  var td1=document.createElement('td');
	  var td2=document.createElement('td');
	  td2.innerHTML="<input name='file[]' size='20' type='file' class='input2'  onchange='add_file(true);false;'/>";
	  tr.appendChild(td1);
	  tr.appendChild(td2);
	  d.appendChild(tr);
	  file_added++;
	  }
	 return false;
}

Последний раз редактировалось brazilius, 13.10.2008 в 08:44.
Ответить с цитированием
  #2 (permalink)  
Старый 13.10.2008, 11:54
Кандидат Javascript-наук
Отправить личное сообщение для SunnyDay Посмотреть профиль Найти все сообщения от SunnyDay
 
Регистрация: 22.09.2008
Сообщений: 111

я бы вот это:
td2.innerHTML="<input name='file[]' size='20' type='file' class='input2'  onchange='add_file(true);false;'/>";

написал бы тоже через createElement - так правильнее

потом ещё:
var d = document.getElementById('fileDiv');

получается ты добавляешь диву элемент TR? Поидее он будет правильным только для TABLE

add_file(true);false;


зачем приписка false в конце?
Ответить с цитированием
  #3 (permalink)  
Старый 13.10.2008, 18:44
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

SunnyDay, в IE невозможно задать атрибут type для DOM-узла, поэтому приведённый пользователем brazilius способ — единственное кросс-браузерное решение для динамического создания элементов ввода.
Ответить с цитированием
  #4 (permalink)  
Старый 13.10.2008, 18:55
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Octane
в IE невозможно задать атрибут type для DOM-узла
Можно, если делать это до добавления в дерево.
Ответить с цитированием
  #5 (permalink)  
Старый 13.10.2008, 20:05
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Блин и правда можно О_о я почему-то был на 100% уверен, что невозможно в IE :-)
Ответить с цитированием
  #6 (permalink)  
Старый 13.10.2008, 20:24
Новичок на форуме
Отправить личное сообщение для brazilius Посмотреть профиль Найти все сообщения от brazilius
 
Регистрация: 12.10.2008
Сообщений: 2

то есть заменить
td2.innerHTML="<input name='file[]' size='20' type='file' class='input2'  onchange='add_file(true);false;'/>";

на creatElement и все?
Ответить с цитированием
  #7 (permalink)  
Старый 13.10.2008, 20:40
Кандидат Javascript-наук
Отправить личное сообщение для magistr_bender Посмотреть профиль Найти все сообщения от magistr_bender
 
Регистрация: 07.09.2008
Сообщений: 133

да. вариант с элемент криэйт лучше
вообще желательно по возможности меньше использовать innerHTML и заменять где это можно на элементкриэйт
Ответить с цитированием
  #8 (permalink)  
Старый 14.10.2008, 09:09
Аватар для Snipe
Профессор
Отправить личное сообщение для Snipe Посмотреть профиль Найти все сообщения от Snipe
 
Регистрация: 06.05.2008
Сообщений: 765

А innerHTML случаем не быстрее работает?
Ответить с цитированием
  #9 (permalink)  
Старый 14.10.2008, 12:56
Кандидат Javascript-наук
Отправить личное сообщение для SunnyDay Посмотреть профиль Найти все сообщения от SunnyDay
 
Регистрация: 22.09.2008
Сообщений: 111

innerHTML это полюбому идёт парсинг кода, а createElement - вставка напрямую, естественно createElement быстрее.
Сообщение от Octane
в IE невозможно задать атрибут type для DOM-узла
тогда понятно, но я бы конечно всёравно разделил
if (IE())
{
//inner
}else{
//create
}
Ответить с цитированием
  #10 (permalink)  
Старый 14.10.2008, 13:32
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от SunnyDay
innerHTML это полюбому идёт парсинг кода, а createElement - вставка напрямую, естественно createElement быстрее.
http://www.e-time.it/topics/44-html/...-createelement
Ответить с цитированием
Ответ



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

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