Сайты - по стандартам, но не стандартные сайты!
Я прошу прощения: надо мной тут стоят и спрашивают когда уберусь.
Придется отложить выход на связь до понедельника. Уж извините, что так вышло .....
Нет на форуме
mdi
Да ничего, все OK!
Нет на форуме
Добрый день!
Скрипт я опробовал. И должен сообщить, что его я слегка откорректировал. Причина в том, что при повторном щелчке по наименованию, слой закрывался и "минус" менялся на "плюс " . Теперь ничего этого не происходит.
Текст скрипта:
--------------------------------------------------------------------------------------------------------------
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]);
}
}
-------------------------------------------------------------------------------------------------------------------------------
Отредактированно mdi (19.06.2010 09:19)
Нет на форуме
mdi
А я сразу и не понял, что такая задумка имеется - открывать/закрывать только с помощью плюс/минус. Теперь ясно...
Нет на форуме
Нет. Я просто неочень ясно выразился:
при нажатии плюс\минус просто раскрывается\закрывается директорий (слой);
при нажатии на наименование первый раз, - все срабатывает; т.е. плюс меняется на минус и в правый фрейм выводится содержимое страницы. Если щелкать > 1 раза, то ничего не происходит ...
Нет на форуме
Вот если бы теперь решить задачу закрытия всех слоев с оставлением открытой ветки с выбранным пунктом (по-возможности, без массива), то можно было бы считать, что я Вас отвлекал не зря ....
Нет на форуме
mdi
Я еще в выходные дни сделал закрытие предыдущего открытого пункта при открытии нового, но теперь надо кое-что изменить...
А вообще мне не совсем понятна эта идея, когда при повторном нажатии на наименование ветвь не закрывается (ведь обыно так бывает!), а снова открывается окно.
В любом случае можно все устроить. Да, и еще, в шаблон страницы не будут внесены какие-либо изменения? Ведь если добавить какие-нибудь теги между уже существующими, то сценарий работать не будет (может даже будут ошибки).
Нет на форуме
AKS написал:
mdi
Я еще в выходные дни сделал закрытие предыдущего открытого пункта при открытии нового, но теперь надо кое-что изменить...
А вообще мне не совсем понятна эта идея, когда при повторном нажатии на наименование ветвь не закрывается (ведь обыно так бывает!), а снова открывается окно.
В любом случае можно все устроить. Да, и еще, в шаблон страницы не будут внесены какие-либо изменения? Ведь если добавить какие-нибудь теги между уже существующими, то сценарий работать не будет (может даже будут ошибки).
Пока Вы несовсем изменили:
возможен такой вариант, - вынести вызов скрипта, скажем, на первый слой и в нем проверять откуда щелчок, - с иконки или с наименования ?
Если это глобальные переделки, то, может тогда, не стоит ?
А насчет добавления тегов, то, я думаю, что в любом случае будут ошибки, если не сделать перевывод ...
Ведь все делается в XML ... А он имеет дурную черту: как все загружено в память, так и существует ...
Изменения можно увидеть только сделав перевывод ... (по-крайней мере, я так понял из литературы; да и сам столкнулся с такой его особенностью) ...
Нет на форуме
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]); } } }
Поместил все в один объект, добавил предварительную загрузку изображений, и еще кое-что...
Нет на форуме
mdi
Да, если что, Вы там имена меняйте, как Вам захочется...
Забыл указать, что используя этот объект, в аттрибутах ссылок "onclick" нужно теперь писать: listTools.switchNode("здесь все, как раньше")
Отредактированно AKS (19.06.2010 17:17)
Нет на форуме
Спасибо. Мне бы такого учителя, да пораньше: сейчас бы никаких вопросов не задавал бы ....
Результат смогу сказать Вам только завтра ....
Нет на форуме
mdi
Какого "учителя", я сам еще javascript только учу!
Нет на форуме
Тем не менее ... Почему Вы считаете, что учитель, - это человек обязательно с бородой и палочкой ?
Учитель, - это тот, кто может правдиво и доходчиво изложить материал.
Нет на форуме
А насчет открытия/закрытия что решили?
Нет на форуме
Я все-таки оставлю как есть, т.е. при 2 щелчке закрытие не происходит ...
Нет на форуме
Ну там также переделаете, это все касается только метода switchNode...
Все остальное вроде работает, если не менять html-код.
Нет на форуме
А как Вы относитесь к первому за сегодняшний день вопросу:
переносу onclick в первый DIV ?
Это большие переделки или - нет ?
Нет на форуме
А ведь сразу не понял, и до сих пор не пойму - что должно происходить с деревом при клике по первому элементу дерева?
Нет на форуме
Речь не об этом: ходят упорные слухи, что если клик перенести туда, то освободятся все ссылки от вызова скрипта. Просто, якобы, в скрипте проверяется откуда клик, ну, типа:
Отредактированно mdi (19.06.2010 18:17)
Нет на форуме
На сегодня, - все: до свидания, т.е. - до завтра!
Нет на форуме
Можно, но придется написать дополнительные проверки. Вообще, если бы была соответствующая разметка, как я и предлагал изначально, то код можно было сделать намного стройнее и проще.
Короче говоря, возможно многое... Надо пробовать.
Нет на форуме
Честно говоря, у меня ничего не изменилось (может быть так и должно быть). Разве что стало несколько медленнее загружаться. Я сделал следующее:
1. изменил крипт
---------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------
2. изменил вызов скрипта:
---------------------------------------------------------------------------------------------------------------------------
onclick='listTools.switchNode(this,["1a.files/%72ightframe.files/VS.htm","fraContent"]); return false;'
Нет на форуме
mdi
Только к вечеру смог освободится.
Там, в switchNode, Вы напрасно скопировали прежний код. Я ведь специально поместил в один объект все переменные, предварительно загруженные картинки, имена классов сделал свойствами объекта.
Чтобы увидеть, что я изменил, надо было использовать сценарий в том виде, в каком я Вам его предложил.
Изменения в работу сценария я вносил следующие:
1. В случае открытия любой из шести главных ветвей, должна закрываться любая открытая ранее, причем закрывая свои "дополнительные" ветви.
2. В случае открытия любой "дополнительной" ветви, должна закрываться ранее открытая "дополнительная" ветвь из этого раздела.
Вы изменили switchNode и ничего этого теперь не происходит, к тому же не используются предзагруженные изображения и т.д.
Нет на форуме
Признаю свою ошибку, - лежачего не бьют ....
Постараюсь сегодня восстановить Ваш вариант и завтра сказать Вам что получилось ...
Единственный вопрос:
вот эти перечисленные Вами пункты относятся к рабате с чисто деревом, или с наименованием;
грубо говоря, - щелчок по иконке или по наименованию.
Отредактированно mdi (20.06.2010 16:33)
Нет на форуме
mdi
Сценарий я писал в выходные, когда не знал, что нужно открывать/закрывать меню только плюсом/минусом, поэтому будет работать так, как до выходных. Но это легко будет изменить, как это Вы сделали вчера. Честно говоря, я бы советовал так и оставить, но последнее слово за Вами...
Нет на форуме
Сэр. Не говорите загадками:
мне оставить как сейчас или так, как Вы прислали ?
Нет на форуме
mdi
Я хотел сказать, чтобы Вы попробовали в деле сценарий, который я выкладывал вчера в 19.05. Потестируйте, пощелкайте хорошенько, затем будем делать выводы.
Нет на форуме
Хорошо. Вас понял. Завтра скажу результат.
Нет на форуме
OK!
Нет на форуме
Я попробовал и получил ошибку:
mdi написал:
Ошибка синтаксического анализа XML: неправильный
Адрес: file:///F:/VSNB/top.xsl
Строка 76, символ 31: if(this.subList && (this.subList != oList))
-----------------------------------------------^
Прошу извинить, в письме стрелочку пришлось подгонять вручную.
Текст XSLT-таблицы в HTML:
mdi написал:
VSN
Честно говоря, эта строка не получает этот номер, что мне не понятно ...
Можно, конечно, условие разбить на два, скажем:
mdi написал:
if(this.subList)
{
if(this.subList != oList)
{
this.changeProps(this.subList, this.hiddenClass, this.subImg, this.imgs.plus.src);
}
}
Но может быть можно по другому ??? (Ох уж этот FF ... или я в чем то не прав ...)
Отредактированно mdi (21.06.2010 10:53)
Нет на форуме