Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> изменяющееся содержание в <select>, в зависимости от select'a выше по докуме 
:(
    Опции темы
WhiteSpirit
Дата 10.4.2006, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 242
Регистрация: 1.6.2005
Где: Челябинск

Репутация: нет
Всего: нет



Доброе время суток.
Помогите плиз в следующей проблеме.
Имеется xml - файл, в котором хранятся разделы и подразделы каталога (упрощенно):
Код

<?xml version="1.0" encoding="windows-1251" ?>
<catalog>
  <level1 id="1" title="Level1_1"></level1>
  <level1 id="2" title="Level1_2">
    <level2 id="1" title="Level2_2_1"></level2>
    <level2 id="2" title="Level2_2_2"></level2>
  </level1>
  <level1 id="3" title="Level1_3">
    <level2 id="1" title="Level2_3_1">
           <level3 id="1" title="Level3_3_1_1"></level3>
    </level2>
  </level1>  
...
</catalog> 

В общем в некоторых каталогах есть вложенные, в некоторых нет, максимум 3 уровня.

Необходимо при внесении ин формации в БД распределять информацию в соотвествии с каталогами.

Т.е. вначале выбираем через <select name="level1"> Наименование каталога 1-го уровня. Если в этом каталоге имеются каталоги 2-го уровня, то они отображаются в <select name="level2">, ну и соответственно если в нем имеется каталог 3-го уровня, то список отображается в <select name="level3">.

Вот что у меня получается:
Код

<script type="text/javascript">
        var level1Value;
        var level2Value=0;
        var xmldoc=new ActiveXObject ("Microsoft.XMLDOM");
        xmldoc.async=false;
        xmldoc.load("../xml/sitemap.xml");
        var rootElement=xmldoc.documentElement;
        var node=rootElement.childNodes;
        var length=node.length;

        function GetLevel1() {
                var count=0;
                var out="";
                while(count<length) {
                        child=node[count];
                        var attr=child.attributes;
                        var attrLength=attr.length;
                        var index=0;
                        var arr = new Array();
                        while(index<attrLength) {
                                childAttr=attr[index];
                                arr[index]=childAttr.value;
                                index++;
                        }
                        document.product.level1[count]=new Option(arr[1], arr[0]);
                        count++;
                }
        }
        function RemoveOptions(optionMenu) {
                for(var i=0; i<optionMenu.length; i++) {
                        optionMenu.options[i]=null;
                }
        }
        function GetLevel2(level1) {
                RemoveOptions(document.product.level2);
                elem=node[level1-1];
                if(elem.hasChildNodes()) {
                        var child=elem.childNodes;
                        var childLength=child.length;
                        var count=0;
                        while(count<childLength) {
                                var child1=child[count];
                                var attr=child1.attributes;
                                var attrLength=attr.length;
                                var index=0;
                                var arr = new Array();
                                while(index<attrLength) {
                                        childAttr=attr[index];
                                        arr[index]=childAttr.value;
                                        index++;
                                }
                                document.product.level2[count]=new Option(arr[1], arr[0]);
                                count++;
                        }
                }
        }
</script>
...
<form name="product" method="post">
<div class="block"><b>Каталог 1-го уровня</b></div>
<div class="block">
        <select id="level1" name="level1" onchange="RemoveOptions(document.product.level2); GetLevel2(this.options[this.selectedIndex].value)">
        <script>GetLevel1()</script>
        </select>
</div>
<div class="block"><b>Каталог 2-го уровня</b></div>
<div class="block">
        <select id="level2" name="level2">
        </select>
</div>
<script>document.write(level1Value)</script>
<input type="submit" name="send" value="Сохранить">
</form>


Пока пытаюсь осилить два уровня.
Так вот вроде бы по логике всё нормально должно быть: перед отображением нового каталога (при срабатывании onchange), в селекте всё должно "затираться", так вот иногда полностью (затирается) а иногда нет, остается 1-2 старых элеменита.

Помогите плиз решить эту проблемку,
заранее благодарен.

ЗЫ: если есть способ сделать такую штуку проще, буду благодарен за совет.

--------------------
To beer or no to beer
PM MAIL   Вверх
12345c
Дата 10.4.2006, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Интересно, зачем это делать на JS-e, если потом всё равно работать на сервере? Не логичнее ли отправлять на сервер форму с командами, а на нём делать XML или другое? Плюсы в том, что PHP, например, имеет более мощные функции работы с текстами, не говоря уже о возможности работы с каталогами напрямую.
PM WWW   Вверх
WhiteSpirit
Дата 10.4.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 242
Регистрация: 1.6.2005
Где: Челябинск

Репутация: нет
Всего: нет



дело в том что перед тем как отправить объект каталога на сервер в БД, его нужно лпределить (грубо говоря куда его воткнуть в огурцы или помидоры). А вот разделы каталога храняться в XML
--------------------
To beer or no to beer
PM MAIL   Вверх
12345c
Дата 10.4.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Ну и отправьте запрос на объект в виде формы (или XMLHttp, Post), чтобы не пользоваться многословным механизмом нод. На сервере определите место в каталоге.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0856 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.