подскажите не считают ли некоторые браузеры такой код опасным
Всем привет.
Функцию написал для добавления любого количества полей для выбора файлов к форме заказа. Поле можно добавить нажав на ссылку и автоматически после выбора файла, если все созданные поля для выбора файла непустые Уже пару недель она работает. Тестил форму с этим 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;
}
|
я бы вот это:
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 в конце? |
SunnyDay, в IE невозможно задать атрибут type для DOM-узла, поэтому приведённый пользователем brazilius способ — единственное кросс-браузерное решение для динамического создания элементов ввода.
|
Цитата:
|
Блин и правда можно О_о я почему-то был на 100% уверен, что невозможно в IE :-)
|
то есть заменить
td2.innerHTML="<input name='file[]' size='20' type='file' class='input2' onchange='add_file(true);false;'/>"; на creatElement и все? |
да. вариант с элемент криэйт лучше
вообще желательно по возможности меньше использовать innerHTML и заменять где это можно на элементкриэйт |
А innerHTML случаем не быстрее работает?
|
innerHTML это полюбому идёт парсинг кода, а createElement - вставка напрямую, естественно createElement быстрее.
Цитата:
if (IE())
{
//inner
}else{
//create
}
|
Цитата:
|
Т.е. если нужна производительность innerHTML совсем не плохой вариант ;)
|
Цитата:
Просто врятли мне кажется парсинг кода будет быстрее, чем прямое добавление.. |
SunnyDay, эта ссылка говорит только об одном: в разных браузерах по разному.
|
|
| Часовой пояс GMT +3, время: 15:26. |