Xpoint
   [напомнить пароль]

Неправильно добавляется таб

Метки: [без меток]
2007-05-09 14:41:02 [обр] Frutik[досье]

У меня похожая проблема. Если таб добавлять нажатием кнопки - получается полноценный таб. табы же добавленные через вызов джава-скрипта напрямую получаются "неполноценными" - табы как бы "не привязаны к панелям", переключение всятаки происходит (хотя их добавляет одна и та же функция)

Код следующий

<window title="Main window"
        xmlns:html="http://www.w3.org/1999/xhtml"
        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

<script type="application/x-javascript">
<![CDATA[

    function addTab(label,value,url) {

        tabs = document.getElementById('tabs');
        tabpanels = document.getElementById('tabpanels');
          
        // Create the new tab and select it
        newTab = tabs.appendItem(label, value);

        tabs.selectedItem = newTab;
        var idx = tabs.selectedIndex;

        newTab.setAttribute("id",'tab-'+idx);

        // Create a new panel
        var tabpanel = document.createElement('tabpanel');
        tabpanel.setAttribute('id', 'panel-' + idx);

   newTab.linkedPanel = tabpanel.getAttribute("id");

        var iframe = document.createElement('iframe');
   iframe.setAttribute('id', 'frame-' + idx);
   iframe.setAttribute('src', url);

   tabpanel.appendChild(iframe);
   tabpanels.appendChild(tabpanel);
       
   return true;
    }

    function closeTab() {
   tabs = document.getElementById('tabs');
   tabpanels = document.getElementById('tabpanels');
   tab_s = tabs.selectedItem;
   var idx = tabs.selectedIndex;
        tabs.advanceSelectedTab(-1,true);
        if (!idx) {
            idx = 0;
        }
        tabpanels.removeChild(tabpanels.childNodes[idx]);
   tabs.removeItemAt(idx);
   return true;
    }
]]>
</script>                                                                                               }


<hbox flex="1">
    <vbox id="left-frame" width="300px">
   <button label="add" onclick="addTab('Tab',1,'http://www.google.com')"/>
    </vbox>
    <splitter collapse="before" resizeafter="grow" persist="state">

    <grippy />
    </splitter>
    <vbox id="right-frame" flex="1">
    <tabbox orient="vertical" flex="1" id="tabbox">
            <tabs closebutton="true" disableclose="false" id="tabs" onclosetab="closeTab()"></tabs>
            <tabpanels flex="1" id="tabpanels"></tabpanels>
        </tabbox>
    </vbox>
</hbox>

<script type="application/x-javascript">
<![CDATA[

    addTab('Tab',1,'http://google.com');
    addTab('Tab',1,'http://google.com');
    addTab('Tab',1,'http://google.com');

]]>
</script>                                                                                               }

</window>

Кто-нибуть может помочь понять что происходит?

спустя 5 минут [обр] Владимир Палант(434/4445)[досье]
М Frutik[досье]
На Xpoint существует правило: один вопрос — одна тема. Не добавляйте свое "у меня похожая проблема" в тему, которая исчерпала себя несколько месяцев назад, тем более что эта тема уже приговорена к удалению. Автору темы ваше обсуждение, возможно, не интересно, кроме того разобраться в теме будет существенно сложнее. Создавайте для своего вопроса собственную тему. Также рекомендую к прочтению: Минимальный проблемный код
спустя 6 минут [обр] Владимир Палант(434/4445)[досье]
Вместо тонны кода вы бы лучше сказали, что в вашем понятии "неполноценный" таб. Я все-таки решил посмотреть ваш код — что "напрямую", что кнопкой, всегда создается одинаковый пустой таб. Если фрейму, который вы создаете, добавить атрибут flex=1, то все табы будут корректно показывать Google. Так может все-таки объясните, в чем у вас проблема?
спустя 29 минут [обр] Frutik[досье]

Сорри за нарушение правил. Избыточной являеться только функция closeTab(). "Неполноценность" таба была проиллючтрирована "иллюстрацией"

Вот две иллюстрации к ситуации:

http://linux.te.ua/123/tabs1.jpg - первых три таба добавлены куском кода

<script type="application/x-javascript">
<![CDATA[

    addTab('Tab',1,'http://google.com');
    addTab('Tab',1,'http://google.com');
    addTab('Tab',1,'http://google.com');

]]>
</script>

следующие три - нажатием кнопки "add", активный таб "полноценен" (в визуальном смысле)

http://linux.te.ua/123/tabs2.jpg - выбран "неполноценный" таб

спустя 7 минут [обр] Владимир Палант(434/4445)[досье]
сообщение промодерировано

Теперь ясно, так бы сразу. Вы начинаете добавлять табы до окончания загрузки документа, в этом вся проблема. Вообще не рекомендуется трогать XUL-элементы до окончания загрузки, они в этот момент часто еще не инициализированы. Ставьте элементу window атрибут onload="init(event)", а в JavaScript пишите:

function init(event) {
  if (event.target == document) {
    addTab('Tab',1,'http://google.com');
    addTab('Tab',1,'http://google.com');
    addTab('Tab',1,'http://google.com');
  }
}

Проверка event.target нужна, поскольку фреймы тоже создают событие load.

спустя 1 час 20 минут [обр] Frutik[досье]
спасибо
Powered by POEM™ Engine Copyright © 2002-2005