Это ошибка IE?
Кажется, так. Когда вы создаете элемент с помощью методов DOM, IE не совсем подхватывает атрибут «name». Это что-то вроде того, что элемент отправляется, но если вы попытаетесь получить «innerHTML» представление элемента, он загадочным образом исчезнет. Этого не произойдет, если вы создадите элемент, написав напрямую в innerHTML.
Также, если вы используете методы навигации формы DOM уровня 0, такие как «myform.elements.x.value», доступ через массив «elements» может не работать (аналогично прямой доступ к «myform.x», который некоторые люди ошибочно используют) , В любом случае в наши дни вы можете предпочесть getElementById ().
Итак либо использовать innerHTML или использовать методы DOM; Лучше не смешивать их при создании полей формы.
Это задокументировано (см. "Замечания") и, наконец, исправлено в IE8.
В любом случае, никогда не делайте:
div.innerHTML + = '...';
Это только синтаксический сахар для:
div.innerHTML = div.innerHTML + '...';
Другими словами, он должен сериализовать все дочернее HTML-содержимое элемента, затем выполнить конкатенацию строк, а затем повторно проанализировать новую строку обратно в элемент, отбросив весь исходный контент. Это означает, что вы потеряете все, что не может быть сериализовано: а также поддельные атрибуты «name», созданные в IE, которые также означают любые обработчики событий JavaScript, прослушиватели DOM или другие пользовательские свойства, которые вы прикрепили к каждому дочернему элементу. Кроме того, ненужный цикл сериализации / анализа является медленным.