Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: дурDOM в IE
 
 автор: 6apa6ashka   (27.08.2008 в 16:58)   письмо автору
 
 

Здравствуйте, столкнулся со следующей проблемой не знаю куда бы вставить созданный мною объект через obj = document.createDocument("div"); в сам документ непосредственно, попробывал, так: document.body.appendChild(obj); работает в опере, в лисе, но в IE это нечто, он просто отказывается загружать эту страницу из-за подобной привязки, как быть?

  Ответить  
 
 автор: PAT   (27.08.2008 в 17:19)   письмо автору
 
   для: 6apa6ashka   (27.08.2008 в 16:58)
 

document.createDocument ("div")

document.createElement ("div")

*Внимательно прочтите. Найдите одно отличие. Оно - решающее.

  Ответить  
 
 автор: 6apa6ashka   (27.08.2008 в 17:23)   письмо автору
 
   для: PAT   (27.08.2008 в 17:19)
 

извените, описался.. в самом же коде написал, так как вы меня подкорректировали, иначе в лисе и опере бы просто не работало, о чем я писал выше, там бы и броузер ругался по другому.
re: суть проблемы я изложил выше но решения не нашел

  Ответить  
 
 автор: coloboc66   (27.08.2008 в 17:38)   письмо автору
 
   для: 6apa6ashka   (27.08.2008 в 17:23)
 

То есть, вы хотите сказать, что метод appendChild() не работает в ИЕ??? Неправда - работает, ищите ошибки своём в коде.

  Ответить  
 
 автор: 6apa6ashka   (27.08.2008 в 18:04)   письмо автору
8.9 Кб
 
   для: coloboc66   (27.08.2008 в 17:38)
 

хех.. прям как политика firewall "все, что не запрещено, то разрешено".
я ничего не говорил про, то что он там не работает. я говорю что именно при привязке к document.body он вылетает, может в какое нибудь другое место можно положить объект?
код рабочий! документ в архиве прикрепленном - если захочется подойти ближе к проблеме
--
p.s и это все при условии что ничего больше создавать не нужно, тоесть к примеру доп. слой div в в него пихать этот obj

  Ответить  
 
 автор: PAT   (27.08.2008 в 18:35)   письмо автору
 
   для: 6apa6ashka   (27.08.2008 в 18:04)
 

Метод appendChild применяется ТОЛЬКО к уже сформированным на странице объектам.

В вашем же коде написано (функция Menu.prototype.ElementAdd):
this.obj.appendChild(div);
где
this.obj = document.createElement ("div");
который приживляется к объекту body
document.body.appendChild (this.obj);
который на этапе подключения функции ElementAdd ещё НЕ СФОРМИРОВАН,
ибо объект body формируется только тогда, когда парсер доходит до
закрывающего тега </BODY> (или до конца HTML-кода).
Лисе и Опере достаточно открывающего тега, но MSIE к этому более строг.

*Внимательно прочтите

  Ответить  
 
 автор: 6apa6ashka   (27.08.2008 в 20:55)   письмо автору
 
   для: PAT   (27.08.2008 в 18:35)
 

спасибо, хороший аргументированный ответ, но как мне быть?
как бы мне вставить объект и куда? можете поделится какими-нибудь вариантами?

  Ответить  
 
 автор: PAT   (28.08.2008 в 02:15)   письмо автору
 
   для: 6apa6ashka   (27.08.2008 в 20:55)
 

Вариант 1 (самый здесь, ИМХО, рациональный).
Уйти от DOM-методов и в ячейках, где вы создаете меню, воспользоваться древним, но надежным методом write ()

Вариант 2 (для извращенцев).
а) Тегу <BODY> дать изначальную невидимость.
б) Из ячеек, в коих ныне вставлены скриптовые блоки, эти самые блоки убрать (вместе с последующими после меню тегами <IMG>)
в) Назначить этим ячейкам соответствующие идентификаторы (id="td23", id="td22", id="td21", id="td18" ... id="td1")
г) В подключаемом скрипте по загрузке окна запускать функцию, коя по циклу во всех этих ячейках запустит вашу ElementAdd (функцию надо будет чуть переделать, чтобы сама ячейка в виде переменной parent ей передавалась)
д) "Приживлять" в каждую ячейку ещё и тег <IMG> с соответствующими атрибутами/свойствами
е) По окончании цикла дать телу документа видимость.

PS. Кроме того, предупреждаю вас, что в вашем коде есть ещё, как минимум, один "сюрпрайз" для вас:-)
Вашу строку
name.name='name[]';
как и строку
file.name='file[]';
браузер MSIE проигнорирует, следовательно, инпуты ваши имён не получат и ничего при отправке данных не передадут. Для MSIE имена инпутов следует определять непосредственно в методе createElement, т.е.:
для MSIE: var obj_input = document.createElement ('<input name="нужное имя">');

для прочих: var obj_input = document.createElement ('input'); obj_input.name = "нужное имя";

Подробнее об этом - если вас не пугают аГлиЦкие буковки - можете прочитать здесь и здесь.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования