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