The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"JavaScript - связанные SELECT-ы"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы WEB технологии (Public)
Изначальное сообщение [Проследить за развитием треда]

"JavaScript - связанные SELECT-ы" 
Сообщение от klyaznik emailИскать по авторуВ закладки on 03-Мрт-05, 15:50  (MSK)
Помогите пожалуйста сделать три связных SELECT-а. Пример: Район -> Улица -> Дом. То есть в одном SELECT-е выбираешь район - в другом остаются только нужные улицы, а в третьем - только нужные дома. Нашел код, которые делает связку Район -> Улица и не могу изменить его для связки трех SELECT-ов:
<html><head></head><body>
    <form name="info">
    <select name="segment_id" onChange="redirect(this.options.selectedIndex);" onClick="redirect(this.options.selectedIndex);">
    <option value="">Выберите сегмент</option>
    <option value="1">Ферма</option>
    <option value="2">Город</option>
    </select>
    <select name="street_id" onchange="modelvalue();">
    <option value="">Выберите улицу</option>
    </select>
    <script>
    var groups=document.info.segment_id.options.length
    var group=new Array(groups)
    for (i=0; i<groups; i++)
    group[i]=new Array()
    group[1][0]=new Option("Ясная","1")
    group[1][1]=new Option("Лесная","2")
    group[2][0]=new Option("Кооперативная","3")
    group[2][1]=new Option("Новоугличевский пр-т","4")
    group[2][2]=new Option("Спортивная","5")
    document.info.segment_id.index = document.info.segment_id.options[0].text;
    var temp=document.info.street_id;
    function redirect(x){
        for (m=temp.options.length-1;m>0;m--)
        temp.options[m]=null
        for (i=0;i<group[x].length;i++){
            temp.options[i]=new Option(group[x][i].text,group[x][i].value)
        }
        var prevalue = document.info.segment_id.value
        var sufvalue = temp.value
        document.revision.productid.value=(prevalue+"-"+sufvalue)
    }
    function modelvalue(){
        var prevalue2=document.info.segment_id.value
        var sufvalue2=document.info.street_id.value
        document.revision.productid.value=(prevalue2+"-"+sufvalue2)
    }
    </script>
    <input type=submit></form>
</body></html>

На крайний случай устроит связка такого типа - выбираешь район и в двух других SELECT-ах остаются данные, привязанные к району.

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "JavaScript - связанные SELECT-ы" 
Сообщение от XAnder Искать по авторуВ закладки(??) on 04-Мрт-05, 09:31  (MSK)
Я сейчас работаю над схожей задачей. Не знаю, пригодится ли, но на всякий случай опишу.

Работаю с MySQL на PHP. В базе есть куча таблиц, некоторые связаны друг с другом внешними ключами или таблицами-связками. Структура базы сложна и может со временем изменяться. Для примера возьмём Ваш случай: три таблицы - Дома, Улицы, Районы - связаны внешними ключами Дома -> Улицы, Улицы -> Районы. Нужно выбирать SELECTом строку из Дома.

Предположим, что домов неподъёмное количество. Выдавать полный их список клиенту (даже в скрытом виде - внутри JavaScript, как в Вашем примере) - это плодить тонны ненужного трафика.

Сначала делаем SELECT для домов пустым и предлагаем выбрать улицу другим SELECTом, на который весим onChange следующего содержания:

open(
"filter.php?form=<название формы>&select=<название SELECTа>" +
"&tname=<название целевой таблицы (Дома)>" +
"&filterid=" + this.options[this.selectedIndex].value,
"filterWindow", "dependent=yes,width=100,height=100"
);

Смысл - подать запрос к серверу, открыв маленькое окошко, которое потом само себя закроет. Понимаю, что решение несколько кособоко, но работает :) Можно попробовать с IFRAME, наверное будет покрасивее, сам не пробовал.

Скрипт filter.php сделает запрос к БД, ему известно из какой таблицы брать данные, по какому значению внешнего ключа их фильтровать, в какую форму и в какой SELECT их складывать. Дальше - дело техники.

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

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "JavaScript - связанные SELECT-ы" 
Сообщение от dev emailИскать по авторуВ закладки(??) on 04-Мрт-05, 13:13  (MSK)
>Смысл - подать запрос к серверу, открыв маленькое окошко, которое потом само
>себя закроет.

Только не наступи на граблю - большинство браузеров по умолчанию запрещают popup'ы. С фреймом надежней. И не обязательно iframe, можно и обычный, но это уже дело вкуса.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "JavaScript - связанные SELECT-ы" 
Сообщение от XAnder Искать по авторуВ закладки(??) on 04-Мрт-05, 15:41  (MSK)
>Только не наступи на граблю - большинство браузеров по умолчанию запрещают popup'ы.
>С фреймом надежней. И не обязательно iframe, можно и обычный, но это уже дело вкуса.

Сделал сейчас с IFRAME - обычные фреймы у меня дизайном не предусмотрены. И всё работало прекрасно, пока юзал Мозиллу... Потом решил открыть в M$IE. Там тоже работает, но при попытке обновить страницу, выдаёт матерное окошко, гласящее:

"Данная страница предоставляет небезопасную информацию элементу управления ActiveX. Такой способ использования элементов управления запрещён текущими установками безопасности. В результате, данная страница может отображаться некорректно. OK?"

Жму OK - "данная страница" отображается совершенно "корректно". Что за "небезопасная информация"? Какой там "ActiveX"? X3 как обычно :(

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "JavaScript - связанные SELECT-ы" 
Сообщение от dev emailИскать по авторуВ закладки(??) on 04-Мрт-05, 18:35  (MSK)
Вот, кстати:
https://www.opennet.ru/opennews/art.shtml?num=5140
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "JavaScript - связанные SELECT-ы" 
Сообщение от XAnder Искать по авторуВ закладки(??) on 05-Мрт-05, 11:07  (MSK)
>Вот, кстати:
>https://www.opennet.ru/opennews/art.shtml?num=5140

Спасибо за ссылку - впечатляет! Возьму на вооружение.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру