this.CalendarDIV = document.createElement("DIV");
this.CalendarDIV.setAttribute('id','Div'+ObjId);
this.CalendarDIV.className='DivElement';
document.getElementsByTagName('body')[0].appendChild(this.CalendarDIV);
Динамическое создание объектов в JS
Цитата:
this.CalendarDIV = document.createElement("DIV");
this.CalendarDIV.setAttribute('id','Div'+ObjId);
this.CalendarDIV.className='DivElement';
document.getElementsByTagName('body')[0].appendChild(this.CalendarDIV);
this.CalendarDIV.setAttribute('id','Div'+ObjId);
this.CalendarDIV.className='DivElement';
document.getElementsByTagName('body')[0].appendChild(this.CalendarDIV);
Тупой ИЕ в некоторых случаях ругается на строку
Цитата:
document.getElementsByTagName('body')[0].appendChild(this.CalendarDIV);
Есть подозрения что именно в том случи когда загружаются несколько JS файлов с динамическим созданием DIV – а результатом этой ошибки является то что ИЕ обрывает соединение с сервером
Как можно избежать данной проблемы? Может есть другие способы создания?
body то на этот момент загружено?
Код:
ставлю
Код:
if (!document.getElementsByTagName('body'))
Получается
Код:
if (document.getElementsByTagName('body')){
this.CalendarDIV = document.createElement("DIV");
this.CalendarDIV.setAttribute('id','Div'+ObjId);
this.CalendarDIV.className='DivElement';
document.getElementsByTagName('body')[0].appendChild(this.CalendarDIV);
}
this.CalendarDIV = document.createElement("DIV");
this.CalendarDIV.setAttribute('id','Div'+ObjId);
this.CalendarDIV.className='DivElement';
document.getElementsByTagName('body')[0].appendChild(this.CalendarDIV);
}
То скрипит срабатывает что говорит о том что body есть.
Да еще раз повторюсь не работает только на ИЕ
Цитата: Robinnovich
То скрипит срабатывает что говорит о том что body есть.
Body, может быть, и есть, а может и "не есть". Вы ведь проверяете наличие коллекции элементов <body> в документе:
Код:
if (document.getElementsByTagName('body'))
Но даже при наличии <body>:
Код:
if (document.getElementsByTagName('body').item(0))
может оказаться так, что содержимое тела документа загружено еще не полностью. И вот тогда и возникает ошика в IE...
В таком случае, создания DIV'а можно прицепить к body onLoad...
можно написать проще:
document.body.appendChild(this.CalendarDIV);
но выполнять этот код это можно только после того, как браузер загрузил весь документ (и сформировал DOM). на коротких страничках и в некоторых браузерах может работать и без этого (при этом CalendarDIV может чудным образом оказаться не в конце, а в начале или середине документа), но по-хорошему, так делать нельзя.
самое простое - подвязать функцию с appendChild к событию window.onload. либо вызывать ее по нажатию пользователем на кнопку, например. т.е., главное - не во время загрузки страницы.
Спасибо попробую )
Как вариант если JS в коде страницы, то ставить его в самом конце страницы перед </bode>. Плюса 2: функции начнут выполнение когда страница уже загружена (хотя и не гарантируется), поисковые роботы не парсят код скрипта который все равно выполнить не могут.