Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Глюки при установке className в ИЕ6 (https://javascript.ru/forum/events/6525-glyuki-pri-ustanovke-classname-v-ie6.html)

kostyl 03.12.2009 01:45

Глюки при установке className в ИЕ6
 
Устанавливаю JS-ом className у дива. Иногда глючит, не могу понять почему. Причем это происходит так. Устанавливаю className. Див растягивается до бесконечности по ширине. Захожу в Сервис/свойства обозревателя/Ок и вуаля, всё встало на свои места.
Чё блин за бред???

subzey 03.12.2009 09:30

Ну, вы хотя бы ссылку на пример оставили. Всех "особенностей" IE6 и не упомнишь.

kostyl 03.12.2009 09:41

я бы вставил, но вот это всё динамически делается.
Вообщем там происходит примерно следующее
var El = document.getElementById(ElId);
if(ElClassName && ElClassName != '') {
El.className = ElClassName;
}
if(ElContent && ElContent != '') {
El.innerHTML = ElContent;
}


Я знаю есть проблемы с путаньем name и id при getElementById, но name я вообще не использую. В связи с вышеописанным, я думаю что возможно ИЕ не хочет обновить до конца DOM. А когда я вызваю менюшку то он это делает. Может есть способ заставить браузер обновить дерево?

Riim 03.12.2009 09:51

Цитата:

Сообщение от kostyl
не хочет обновить до конца DOM

Поиск нужно использовать. http://javascript.ru/forum/dom-windo...-stranicy.html

kostyl 03.12.2009 10:11

ну эта статья мне ничем не помогла...

kostyl 03.12.2009 12:06

а есть какой нибудь тетод у div-а типа repaint() или подобное?

Kolyaj 03.12.2009 12:08

Цитата:

Сообщение от kostyl
а есть какой нибудь тетод у div-а типа repaint() или подобное?

Нативного нет. Он обычно эмулируется, ты не поверишь чем... установкой и удалением CSS-класса :)

kostyl 03.12.2009 12:53

Цитата:

Сообщение от Kolyaj (Сообщение 37059)
установкой и удалением CSS-класса :)

:blink: попробую два раза установить ))

kostyl 03.12.2009 14:24

Похоже не я один с такой проблемой.
Мне кажется, что проблема с CSS классом обусловлена проблемой в обновлении DOM при записи innerHTML контента. Я даже иногда наблюдал ситуации "увечья" отображения без присваивания классов, а лишь с изменением контента. А эта штука в ИЕ лечится внедрением элементов, вроде, исходя из нагугленного мной. Но я не пробовал еще.
Как думаете?

Kolyaj 03.12.2009 14:46

Можно попробовать стандартные таблетки: position: relative или zoom: 1.

subzey 03.12.2009 14:59

kostyl, голубчик,
а Вы "width:100%" или отрицательные поля, случаем, нигде не используете? Ошибок скрипта нет ли? Что говорит IE Developer Toolbar?

kostyl 03.12.2009 21:40

Когда уже ничего не помогало методом прямого перебора было установленно, что во всем виноват контейнер формы, который находился в недрах контента обновляющего проблемный div. Вот код одного из подконтейнеров:
Код:

.form {
        float: left;
        width: 60%;
}
.text {
        margin-left: 60%;
        text-align: justify;
        padding: 5px;
}

margin-left: 60%; виновник. Только вот я не пойму почему так?

kostyl 05.12.2009 01:31

Ааа, понятно....

))

subzey 06.12.2009 15:35

kostyl,
Я так понял, .form и .text сиблинги.
Для IE6 есть таблэтка против этого, все флоаты делаем display:inline.

С точки зрения W3C это бред: для всех элементов с float не "none", position не "absolute" или "fixed" и display не "none" значение display игнорируется и устанавливается в "block". Но майкрософтовскому продукту это помогает.

kostyl 07.12.2009 00:43

Просто много таких кусков, которые хочется сделать, чтобы они выглядели как таблица из двух колонок. Но надо делать именно блоками, а я другого нормального способа кроме этого не знаю. Статика отображается вполне приемлемо, но динамическая замена контента в ИЕ6 выражается в неприятную бяку...


Часовой пояс GMT +3, время: 18:57.