Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.06.2012, 16:51
Профессор
Отправить личное сообщение для demoniqus Посмотреть профиль Найти все сообщения от demoniqus
 
Регистрация: 28.05.2008
Сообщений: 181

проблемы с appendChild в IE6
Помогите понять, где ошибка в коде с точке зрения IE6. Опишу проблему. Данной функцией сначала создается полупрозрачный объект div и методом document.body.appendChild(div) втыкается на страницу. Тут проблем нет - все выполняется. Далее создается div_form под размещение на нем функционала и также втыкается на страницу через document.body.appendChild(div_form). Тоже проблем нет.
далее создается табличка с надписями, объектами. Вот она почему-то упорно не желает методом div_form.appendChild(table) вставляться на страницу, хотя содержимое для отображения точно имеется, о чем свидетельствует вывод сообщения в конце alert (table). В чем может быть проблема?
function create_form(type_form, id_album) {
        div = document.createElement("div");
        div.id = "bg_layer";
        div.style.position = 'absolute';
        div.style.backgroundColor = 'red';
        clientWidth = document.documentElement.clientWidth;
        scrollWidth = document.documentElement.scrollWidth;
        clientHeight = Math.max (document.body.clientHeight, (document.documentElement.clientHeight? document.documentElement.clientHeight : document.body.clientHeight), document.body.scrollHeight);
        scrollHeight = document.documentElement.scrollHeight;
        html = document.documentElement;
        body = document.body;
        scrollTop = html.scrollTop || body && body.scrollTop || 0;
        scrollTop -= html.clientTop;
        div.style.width = Math.max(clientWidth, scrollWidth)  + "px";
        div.style.height = Math.max(clientHeight, scrollHeight) + "px";
        op = 0.3;
        div.style.opacity = op;
        div.style.MozOpacity = op;
        div.style.KhtmlOpacity = op;
        div.style.filter = 'alpha(opacity=' + (op * 100) + ')';
        document.body.appendChild(div);
        div.style.left = "0px";
        div.style.top = "0px";
        div.style.zIndex = 1000;
        div.onclick = function () {
                document.getElementById('div_form').parentNode.removeChild(document.getElementById('div_form'));
                document.getElementById('bg_layer').parentNode.removeChild(document.getElementById('bg_layer'));
            }
        div_form = document.createElement("div");
        div_form.id = "div_form";
        div_form.style.position = 'absolute';
        div_form.style.left = "200px";
        div_form.style.top = (scrollTop + 100) + "px";
        div_form.style.width = Math.abs($(window).width() - 400) + "px";
        div_form.style.height = Math.abs($(window).height() - 200) + "px";
        document.body.appendChild(div_form);
        op = 1;
        div_form.style.zIndex = 1001
        div_form.style.opacity = op;
        div_form.style.MozOpacity = op;
        div_form.style.KhtmlOpacity = op;
        div_form.style.filter = 'alpha(opacity=' + (op * 100) + ')';
        div_form.style.backgroundColor = "#999999";
        div_form.style.overflowX = 'hidden';
        div_form.style.overflowY = "auto"
        div_form.style.scrollbar = 'hidden';
        div_form.style.textAlign = 'center'
        div_form.setAttribute('id_album', id_album);
        window.onscroll = function () {
                if (document.getElementById('div_form')) {
                    html = document.documentElement;
                    body = document.body;
                    scrollTop = html.scrollTop || body && body.scrollTop || 0;
                    scrollTop -= html.clientTop;
                    document.getElementById('div_form').style.top = (scrollTop + 100) + "px";
                }
            }
        table = document.createElement('table');
        switch (type_form) {
            case 'to_rename_album' :
                tr = document.createElement('tr');
                td = document.createElement('td');
                tr.appendChild(td);
                td.style.textAlign = 'center';
                td.innerHTML = 'Переименовать';
                td.id = "caption_rename_album";
                table.appendChild(tr);
                ///////////////////////////////
                tr = document.createElement('tr');
                td = document.createElement('td');
                input = document.createElement('input');
                input.type = 'text';
                input.id = 'new_album_name';
                td.appendChild(input)
                tr.appendChild(td);
                td.style.textAlign = 'center';
                table.appendChild(tr);
                ////////////////////////////////
                input = document.createElement('input');
                input.type = 'button';
                input.id = "caption_rename";
                input.value = '{/literal}{$caption_rename}{literal}';
                input.onclick = function () {rename_album()};
                tr = document.createElement('tr');
                td = document.createElement('td');
                td.appendChild(input);
                tr.appendChild(td);
                td.style.textAlign = 'center';
                table.appendChild(tr);
                table.appendChild(tr);
                break;
            case 'to_add_photo':
                
                
                
                
                break;
            case 'to_remove_album':
                tr = document.createElement('tr');
                td = document.createElement('td');
                td.style.textAlign = 'center';
                div = document.createElement('div');
                div.innerHTML = "Удалить";
                div.id = "caption_if_need_move_photos";
                div.style.width = "30%";
                div.style.height = "150px";
                td.appendChild(div);
                select = document.createElement('select');
                select.id = 'move_photos_to_album';
                select_options = [{/literal}
                    ["<option value=''></option>", 0],
                    {foreach from=$albums item=album}
                    ["<option value='{$album.id_album}' />{$album.album_name}</option>", {$album.id_album}],
                    {/foreach}
                    {literal}];
                select.innerHTML = '';
                i = 0;
                while ((select_options[i] != '') && (select_options[i] != undefined)) {
                    if (document.getElementById('div_form').getAttribute('id_album') != select_options[i][1])
                        select.innerHTML += select_options[i][0];
                    i++;
                    }
                td.appendChild(select);
                td.appendChild(document.createElement('br'));
                a = document.createElement('a');
                a.href='javascript: void(0)';
                a.innerHTML = "Удалить";
                a.id = "caption_remove_album";
                a.onclick = function () {
                    if (confirm({"Удалить?")) {
                        request = "doit=remove_album&id_album=" + document.getElementById('div_form').getAttribute('id_album');
                        //обновлять весь mainTD
                        if (document.getElementById('move_photos_to_album').value != '')
                            request += "&move_to_album=" + document.getElementById('move_photos_to_album').value
                        var req = new Request.HTML({url: 'php/doit.php', 
                                    onSuccess: function (responseTree, responseElements, responseHTML, responseJavaScript) {
                                            document.getElementById('div_form').parentNode.removeChild(document.getElementById('div_form'));
                                            document.getElementById('bg_layer').parentNode.removeChild(document.getElementById('bg_layer'));
                                            if (responseHTML = 'remove_OK') {
                                                my_albums();
                                                }
                                        }
                        });
                        req.send(request);
                        }
                    }
                td.appendChild(a);
                tr.appendChild(td);
                table.appendChild(tr);
                break;
            }
        table.id = "table_id";
        table.align = 'center';
        div_form.appendChild(table);
            alert (table.innerHTML)
        div_form.style.textAlign = 'center';
        }
Ответить с цитированием
  #2 (permalink)  
Старый 02.06.2012, 16:58
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

table = document.createElement('table');
заменить на:
var table = document.createElement('table')
var tbody = document.createElement('tbody');
table.appendChild( tbody );
везде вместо table юзать tbody
только эти строки оставить как есть:
table.id = "table_id";
table.align = 'center';
div_form.appendChild(table);

и везде при объявлениях переменных добавить var
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 02.06.2012 в 17:01.
Ответить с цитированием
  #3 (permalink)  
Старый 02.06.2012, 17:05
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

бедное глобальное пространство, объявите переменные все что создаете внутри функции, иначе вы просто засираете глобальное пространство
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #4 (permalink)  
Старый 02.06.2012, 17:06
Профессор
Отправить личное сообщение для demoniqus Посмотреть профиль Найти все сообщения от demoniqus
 
Регистрация: 28.05.2008
Сообщений: 181

Мдя, и правда дело оказалось в tbody, хотя остальные браузеры не жаловались.
Ответить с цитированием
  #5 (permalink)  
Старый 02.06.2012, 17:08
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от demoniqus
Мдя, и правда дело оказалось в tbody, хотя остальные браузеры не жаловались.
остальные браузеры просто сами его создают без вашего участия, а ИЕ6 этого не делает и поэтому не реагирует никак на неправильно построенную таблицу.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IE6. отдать пользователю файл и закрыть окно Vglaz Internet Explorer 0 23.06.2011 13:55
слетает верстка в IE6 и IE7 (js используется) rognarek Internet Explorer 3 08.09.2010 19:34
Проблемы с сайтом в IE6 maesstro Работа 13 27.07.2010 15:50
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37
IE6 + location.href Snipe Internet Explorer 4 12.11.2008 15:58