Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   подскажите не считают ли некоторые браузеры такой код опасным (https://javascript.ru/forum/misc/1969-podskazhite-ne-schitayut-li-nekotorye-brauzery-takojj-kod-opasnym.html)

brazilius 12.10.2008 23:13

подскажите не считают ли некоторые браузеры такой код опасным
 
Всем привет.
Функцию написал для добавления любого количества полей для выбора файлов к форме заказа. Поле можно добавить нажав на ссылку и автоматически после выбора файла, если все созданные поля для выбора файла непустые
Уже пару недель она работает.
Тестил форму с этим 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;
}

SunnyDay 13.10.2008 11:54

я бы вот это:
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 в конце?

Octane 13.10.2008 18:44

SunnyDay, в IE невозможно задать атрибут type для DOM-узла, поэтому приведённый пользователем brazilius способ — единственное кросс-браузерное решение для динамического создания элементов ввода.

Kolyaj 13.10.2008 18:55

Цитата:

Сообщение от Octane
в IE невозможно задать атрибут type для DOM-узла

Можно, если делать это до добавления в дерево.

Octane 13.10.2008 20:05

Блин и правда можно О_о я почему-то был на 100% уверен, что невозможно в IE :-)

brazilius 13.10.2008 20:24

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

на creatElement и все?

magistr_bender 13.10.2008 20:40

да. вариант с элемент криэйт лучше
вообще желательно по возможности меньше использовать innerHTML и заменять где это можно на элементкриэйт

Snipe 14.10.2008 09:09

А innerHTML случаем не быстрее работает?

SunnyDay 14.10.2008 12:56

innerHTML это полюбому идёт парсинг кода, а createElement - вставка напрямую, естественно createElement быстрее.
Цитата:

Сообщение от Octane
в IE невозможно задать атрибут type для DOM-узла

тогда понятно, но я бы конечно всёравно разделил
if (IE())
{
//inner
}else{
//create
}

Kolyaj 14.10.2008 13:32

Цитата:

Сообщение от SunnyDay
innerHTML это полюбому идёт парсинг кода, а createElement - вставка напрямую, естественно createElement быстрее.

http://www.e-time.it/topics/44-html/...-createelement


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