Форум XHTML.ru <!-- по-русски -->

Сайты - по стандартам, но не стандартные сайты!


#31 16.06.2006 17:22

mdi
Разбирающийся
Зарегистрирован: 15.06.2006
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Я прошу прощения: надо мной тут стоят и спрашивают когда уберусь.
Придется отложить выход на связь до понедельника. Уж извините, что так вышло ..... sad

Нет на форуме

 

#32 16.06.2006 17:25

AKS
Опытный
Зарегистрирован: 25.12.2005
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
Да ничего, все OK!

Нет на форуме

 

#33 19.06.2006 09:18

mdi
Разбирающийся
Зарегистрирован: 15.06.2006
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Добрый день!
Скрипт я опробовал. И должен сообщить, что его я слегка откорректировал. Причина в том, что при повторном щелчке по наименованию, слой закрывался и "минус" менялся на "плюс " . Теперь ничего этого не происходит.
Текст скрипта:
--------------------------------------------------------------------------------------------------------------
function switchNode(oTarget,aWinParams)
  {
  if(oTarget)
    {
    var oList = oTarget.parentNode.parentNode.getElementsByTagName("div")[1]; 
    var oImg = oTarget.parentNode.getElementsByTagName("img")[0];
    if(oList.className == "nodeChildrenOpen")
      {
      if(!aWinParams)
        {
        oImg.src = "img/plus.gif";
        oList.className = "nodeChildrenHidden";
        }
      else
        {
        open(aWinParams[0], aWinParams[1]);
        }
      }
   else
     {
     oImg.src = "img/minus.gif";
     oList.className = "nodeChildrenOpen";
     if(aWinParams)
       {
       open(aWinParams[0], aWinParams[1]);
       }
     }
   }
else
   {
   open(aWinParams[0], aWinParams[1]);
   }
}
-------------------------------------------------------------------------------------------------------------------------------
smile

Отредактированно mdi (19.06.2006 09:19)

Нет на форуме

 

#34 19.06.2006 11:42

AKS
Опытный
Зарегистрирован: 25.12.2005
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
А я сразу и не понял, что такая задумка имеется - открывать/закрывать только с помощью плюс/минус. Теперь ясно...

Нет на форуме

 

#35 19.06.2006 12:27

mdi
Разбирающийся
Зарегистрирован: 15.06.2006
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Нет. Я просто неочень ясно выразился:
при нажатии плюс\минус просто раскрывается\закрывается  директорий (слой);
при нажатии на наименование первый раз, - все срабатывает; т.е. плюс меняется на минус и в правый фрейм выводится содержимое страницы. Если щелкать > 1 раза, то ничего не происходит ...

Нет на форуме

 

#36 19.06.2006 12:38

mdi
Разбирающийся
Зарегистрирован: 15.06.2006
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Вот если бы теперь решить задачу закрытия всех слоев с оставлением открытой ветки с выбранным пунктом (по-возможности, без массива), то можно было бы считать, что я Вас отвлекал не зря ....

Нет на форуме

 

#37 19.06.2006 16:09

AKS
Опытный
Зарегистрирован: 25.12.2005
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
Я еще в выходные дни сделал закрытие предыдущего открытого пункта при открытии нового, но теперь надо кое-что изменить...
А вообще мне не совсем понятна эта идея, когда при повторном нажатии на наименование ветвь не закрывается (ведь обыно так бывает!), а снова открывается окно.
В любом случае можно все устроить. Да, и еще, в шаблон страницы не будут внесены какие-либо изменения? Ведь если добавить какие-нибудь теги между уже существующими, то сценарий работать не будет (может даже будут ошибки).

Нет на форуме

 

#38 19.06.2006 17:01

mdi
Разбирающийся
Зарегистрирован: 15.06.2006
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

AKS написал:

mdi
Я еще в выходные дни сделал закрытие предыдущего открытого пункта при открытии нового, но теперь надо кое-что изменить...
А вообще мне не совсем понятна эта идея, когда при повторном нажатии на наименование ветвь не закрывается (ведь обыно так бывает!), а снова открывается окно.
В любом случае можно все устроить. Да, и еще, в шаблон страницы не будут внесены какие-либо изменения? Ведь если добавить какие-нибудь теги между уже существующими, то сценарий работать не будет (может даже будут ошибки).

Пока Вы несовсем изменили:
возможен такой вариант, - вынести вызов скрипта, скажем, на первый слой и в нем проверять откуда щелчок, - с иконки или с наименования ?
Если это глобальные переделки, то, может тогда, не стоит ?
А насчет добавления тегов, то, я думаю, что в любом случае будут ошибки, если не сделать перевывод ...
Ведь все делается в XML ... А он имеет дурную черту: как все загружено в память, так и существует ...
Изменения можно увидеть только сделав перевывод ... (по-крайней мере, я так понял из литературы; да и сам столкнулся с такой его особенностью) ...

Нет на форуме

 

#39 19.06.2006 17:05

AKS
Опытный
Зарегистрирован: 25.12.2005
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
Вот код, сначала его потестируйте, потом продолжим:

Код:

var listTools = { 
    mainList : null, 
    mainImg : null, 
    subList : null, 
    subImg : null, 
    openClass : "nodeChildrenOpen", 
    hiddenClass : "nodeChildrenHidden", 
    imgs : new function() { 
        this.plus = new Image; 
        this.minus = new Image; 
        this.plus.src = "images/plus.gif"; 
        this.minus.src = "images/minus.gif"; 
    }, 
    changeProps : function(oBlock, sClassName, oImg, sSrc) { 
        oBlock.className = sClassName; 
        oImg.src = sSrc; 
    }, 
    switchNode : function(oTarget, aWinParams) { 
        if(oTarget) { 
            var oParent = oTarget.parentNode.parentNode; 
            var oList = oParent.getElementsByTagName("div")[1];  
            var oImg = oTarget.parentNode.getElementsByTagName("img")[0]; 
            if(oList.className == this.openClass) { 
                this.changeProps(oList, this.hiddenClass, oImg, this.imgs.plus.src); 
            }
            else {  
                this.changeProps(oList, this.openClass, oImg, this.imgs.minus.src); 
                if(this.subList && this.subList != oList) { 
                    this.changeProps(this.subList, this.hiddenClass, this.subImg, this.imgs.plus.src); 
                } 
                if(this.mainList && this.mainList != oList && oParent.parentNode.parentNode != this.mainList) { 
                    this.changeProps(this.mainList, this.hiddenClass, this.mainImg, this.imgs.plus.src); 
                } 
                if(oParent.parentNode.parentNode.className == this.openClass) { 
                    this.subList = oList; this.subImg = oImg; 
                } 
                if(oParent.parentNode.parentNode.className != this.openClass) { 
                    this.mainList = oList; this.mainImg = oImg; 
                } 
                if(aWinParams) { open(aWinParams[0], aWinParams[1]); } 
            } 
        } 
        else { open(aWinParams[0], aWinParams[1]); } 
    } 
}

Поместил все в один объект, добавил предварительную загрузку изображений, и еще кое-что...

Нет на форуме

 

#40 19.06.2006 17:07

AKS
Опытный
Зарегистрирован: 25.12.2005
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
Да, если что, Вы там имена меняйте, как Вам захочется...
Забыл указать, что используя этот объект, в аттрибутах ссылок "onclick" нужно теперь писать: listTools.switchNode("здесь все, как раньше")

Отредактированно AKS (19.06.2006 17:17)

Нет на форуме

 

#41 19.06.2006 17:28

mdi
Разбирающийся
Зарегистрирован: 15.06.2006
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Спасибо. Мне бы такого учителя, да пораньше: сейчас бы никаких вопросов не задавал бы .... smile
Результат смогу сказать Вам только завтра ....

Нет на форуме

 

#42 19.06.2006 17:38

AKS
Опытный
Зарегистрирован: 25.12.2005
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
Какого "учителя", я сам еще javascript только учу! wink

Нет на форуме

 

#43 19.06.2006 17:45

mdi
Разбирающийся
Зарегистрирован: 15.06.2006
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Тем не менее ... Почему Вы считаете, что учитель, - это человек обязательно с бородой и палочкой ?
Учитель, - это тот, кто может правдиво и доходчиво изложить материал.

Нет на форуме

 

#44 19.06.2006 17:46

AKS
Опытный
Зарегистрирован: 25.12.2005
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

А насчет открытия/закрытия что решили?

Нет на форуме

 

#45 19.06.2006 17:49

mdi
Разбирающийся
Зарегистрирован: 15.06.2006
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Я все-таки оставлю как есть, т.е. при 2 щелчке закрытие не происходит ...

Нет на форуме

 

#46 19.06.2006 17:52

AKS
Опытный
Зарегистрирован: 25.12.2005
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

Ну там также переделаете, это все касается только метода switchNode...
Все остальное вроде работает, если не менять html-код.

Нет на форуме

 

#47 19.06.2006 17:55

mdi
Разбирающийся
Зарегистрирован: 15.06.2006
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

А как Вы относитесь к первому за сегодняшний день вопросу:
переносу onclick в первый DIV ?
Это большие переделки или - нет ?

Нет на форуме

 

#48 19.06.2006 18:00

AKS
Опытный
Зарегистрирован: 25.12.2005
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

А ведь сразу не понял, и до сих пор не пойму - что должно происходить с деревом при клике по первому элементу дерева?

Нет на форуме

 

#49 19.06.2006 18:16

mdi
Разбирающийся
Зарегистрирован: 15.06.2006
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Речь не об этом: ходят упорные слухи, что если клик перенести туда, то освободятся все ссылки от вызова скрипта. Просто, якобы, в скрипте проверяется откуда клик, ну, типа:
<div onclick="switchNode()">
<!-- menu -->
</div>
Якобы: "В этом случае Вы избавитесь от кучи ненужных аттрибутов onclick в IMG и в A. "

Отредактированно mdi (19.06.2006 18:17)

Нет на форуме

 

#50 19.06.2006 18:22

mdi
Разбирающийся
Зарегистрирован: 15.06.2006
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

На сегодня, - все: до свидания, т.е. - до завтра!

Нет на форуме

 

#51 19.06.2006 18:23

AKS
Опытный
Зарегистрирован: 25.12.2005
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

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

Нет на форуме

 

#52 20.06.2006 11:00

mdi
Разбирающийся
Зарегистрирован: 15.06.2006
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Честно говоря, у меня ничего не изменилось (может быть так и должно быть). Разве что стало несколько медленнее загружаться. Я сделал следующее:
1. изменил крипт
---------------------------------------------------------------------------------------------------------------------------
    <script type="text/javascript">
     var listTools =
       {
       mainList : null,
       mainImg : null,
       subList : null,
       subImg : null,
       openClass : "nodeChildrenOpen",
       hiddenClass : "nodeChildrenHidden",
       imgs : new function()
         {
         this.plus = new Image;
         this.minus = new Image;
         this.plus.src = "img/plus.gif";
         this.minus.src = "img/minus.gif";
         },
       changeProps : function(oBlock, sClassName,oImg, sSrc)
         {
         oBlock.className = sClassName;
         oImg.src = sSrc;
         },
       switchNode : function(oTarget,aWinParams)
         {
         if(oTarget)
           {
           var oList = oTarget.parentNode.parentNode.getElementsByTagName("div")[1]; 
           var oImg = oTarget.parentNode.getElementsByTagName("img")[0];
           if(oList.className == "nodeChildrenOpen")
             {
             if(!aWinParams)
               {
               oImg.src = "img/plus.gif";
               oList.className = "nodeChildrenHidden";
               }
             else
               {
               open(aWinParams[0], aWinParams[1]);
               }
             }
           else
             {
             oImg.src = "img/minus.gif";
             oList.className = "nodeChildrenOpen";
             if(aWinParams)
               {
               open(aWinParams[0], aWinParams[1]);
               }
             }
           }
         else
           {
           open(aWinParams[0], aWinParams[1]);
           }
         }
       }
     </script>
---------------------------------------------------------------------------------------------------------------------------
2. изменил вызов скрипта:
---------------------------------------------------------------------------------------------------------------------------
onclick='listTools.switchNode(this,["1a.files/%72ightframe.files/VS.htm","fraContent"]); return false;'

Нет на форуме

 

#53 20.06.2006 15:59

AKS
Опытный
Зарегистрирован: 25.12.2005
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
Только к вечеру смог  освободится.
Там, в switchNode, Вы напрасно скопировали прежний код. Я ведь специально поместил в один объект все переменные, предварительно загруженные картинки, имена классов сделал свойствами объекта.
Чтобы увидеть, что я изменил, надо было использовать сценарий в том виде, в каком я Вам его предложил.
Изменения в работу сценария я вносил следующие:
1. В случае открытия любой из шести главных ветвей, должна закрываться любая открытая ранее, причем закрывая свои "дополнительные" ветви.
2. В случае открытия любой "дополнительной" ветви, должна закрываться ранее открытая "дополнительная" ветвь из этого раздела.
Вы изменили switchNode и ничего этого теперь не происходит, к тому же не используются предзагруженные изображения и т.д.

Нет на форуме

 

#54 20.06.2006 16:22

mdi
Разбирающийся
Зарегистрирован: 15.06.2006
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Признаю свою ошибку, - лежачего не бьют ....
Постараюсь сегодня восстановить Ваш вариант и завтра сказать Вам что получилось ...
Единственный вопрос:
вот эти перечисленные Вами пункты относятся к рабате с чисто деревом, или с наименованием;
грубо говоря, - щелчок по иконке или по наименованию.

Отредактированно mdi (20.06.2006 16:33)

Нет на форуме

 

#55 20.06.2006 16:32

AKS
Опытный
Зарегистрирован: 25.12.2005
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
Сценарий я писал в выходные, когда не знал, что нужно открывать/закрывать меню только плюсом/минусом, поэтому будет работать так, как до выходных. Но это легко будет изменить, как это Вы сделали вчера. Честно говоря, я бы советовал так и оставить, но последнее слово за Вами...

Нет на форуме

 

#56 20.06.2006 16:35

mdi
Разбирающийся
Зарегистрирован: 15.06.2006
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Сэр. Не говорите загадками:
мне оставить как сейчас или так, как Вы прислали ?

Нет на форуме

 

#57 20.06.2006 16:38

AKS
Опытный
Зарегистрирован: 25.12.2005
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

mdi
Я хотел сказать, чтобы Вы попробовали в деле сценарий, который я выкладывал вчера в 19.05. Потестируйте, пощелкайте хорошенько, затем будем делать выводы.

Нет на форуме

 

#58 20.06.2006 16:40

mdi
Разбирающийся
Зарегистрирован: 15.06.2006
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Хорошо. Вас понял. Завтра скажу результат.

Нет на форуме

 

#59 20.06.2006 16:44

AKS
Опытный
Зарегистрирован: 25.12.2005
Сообщений: 409

Re: Закрытие всех слоев DIV, составляющих меню

OK!

Нет на форуме

 

#60 21.06.2006 10:52

mdi
Разбирающийся
Зарегистрирован: 15.06.2006
Сообщений: 84

Re: Закрытие всех слоев DIV, составляющих меню

Я попробовал и получил ошибку:

mdi написал:

Ошибка синтаксического анализа XML: неправильный
Адрес: file:///F:/VSNB/top.xsl
Строка 76, символ 31: if(this.subList && (this.subList != oList))
-----------------------------------------------^

Прошу извинить, в письме стрелочку пришлось подгонять вручную.
Текст XSLT-таблицы в HTML:

mdi написал:

<html>
  <head>
   <title>VSN</title>
   <style type="text/css">
    div.Node
     {
     margin: 0.2em 0 0.2em 1em;
     font: Menu;
     }
    div.nodeChildrenOpen
     {
     display: block;
     }
    div.nodeChildrenHidden
     {
     display: none;
     }
    div.label a, div.label span
     {
     padding: 0 0 0 0;
     }
    div.label a
     {
    // background: InfoBackground;
    // border: 1px solid #555;
     cursor: pointer;
     }
    div.label img
     {
     margin: 0 0 0 0;
     padding: 0 0 0 0;
     cursor: pointer;
     }
    </style>
    <script type="text/javascript">
     var listTools =
       {
       mainList : null,
       mainImg : null,
       subList : null,
       subImg : null,
       openClass : "nodeChildrenOpen",
       hiddenClass : "nodeChildrenHidden",
       imgs : new function()
         {
         this.plus = new Image;
         this.minus = new Image;
         this.plus.src = "img/plus.gif";
         this.minus.src = "img/minus.gif";
         },
       changeProps : function(oBlock, sClassName,oImg, sSrc)
         {
         oBlock.className = sClassName;
         oImg.src = sSrc;
         },
       switchNode : function(oTarget,aWinParams)
         {
         if(oTarget)
           {
           var oParent = oTarget.parentNode.parentNode;
           var oList = oTarget.parentNode.parentNode.getElementsByTagName("div")[1]; 
           var oImg = oTarget.parentNode.getElementsByTagName("img")[0];
           if(oList.className == this.openClass)
             {
             this.changeProps(oList, this.hiddenClass, oImg, this.imgs.plus.src);
             }
           else
             {
             this.changeProps(oList, this.openClass, oImg, this.imgs.minus.src);
             if(this.subList && this.subList != oList)                    // <------ сюда выдается ошибка
               {
               this.changeProps(this.subList, this.hiddenClass, this.subImg, this.imgs.plus.src);
               }
             if(this.mainList && this.mainList != oList && oParent.parentNode.parentNode != this.mainList)
               {
               this.changeProps(this.mainList, this.hiddenClass, this.mainImg, this.imgs.plus.src);
               }
             if(oParent.parentNode.parentNode.className == this.openClass)
               {
               this.subList = oList;
               this.subImg = oImg;
               }
             if(oParent.parentNode.parentNode.className != this.openClass)
               {
               this.mainList = oList;
               this.mainImg = oImg;
               }
             if(aWinParams)
               {
               open(aWinParams[0], aWinParams[1]);
               }
             }
           }
         else
           {
           open(aWinParams[0], aWinParams[1]);
           }
         }
       }
     </script>
    </head>
    <body>

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

mdi написал:

if(this.subList)
  {
   if(this.subList != oList)
     {
      this.changeProps(this.subList, this.hiddenClass, this.subImg, this.imgs.plus.src);
      }
   }

Но может быть можно по другому ??? (Ох уж этот FF ... или я в чем то не прав ...)

Отредактированно mdi (21.06.2006 10:53)

Нет на форуме

 

Board footer

Работает на PunBB
© 2002—2005 Rickard Andersson