Помогите пожалуйста сделать три связных 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-ах остаются данные, привязанные к району.
Я сейчас работаю над схожей задачей. Не знаю, пригодится ли, но на всякий случай опишу.Работаю с 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а (а можно и четыре, и пять, и сколько влезет), связанных фильтрами, работающими на стороне сервера. Сразу же клиенту нужно передавать только районы, которых (будем считать) совсем немного.
>Смысл - подать запрос к серверу, открыв маленькое окошко, которое потом само
>себя закроет.Только не наступи на граблю - большинство браузеров по умолчанию запрещают popup'ы. С фреймом надежней. И не обязательно iframe, можно и обычный, но это уже дело вкуса.
>Только не наступи на граблю - большинство браузеров по умолчанию запрещают popup'ы.
>С фреймом надежней. И не обязательно iframe, можно и обычный, но это уже дело вкуса.Сделал сейчас с IFRAME - обычные фреймы у меня дизайном не предусмотрены. И всё работало прекрасно, пока юзал Мозиллу... Потом решил открыть в M$IE. Там тоже работает, но при попытке обновить страницу, выдаёт матерное окошко, гласящее:
"Данная страница предоставляет небезопасную информацию элементу управления ActiveX. Такой способ использования элементов управления запрещён текущими установками безопасности. В результате, данная страница может отображаться некорректно. OK?"
Жму OK - "данная страница" отображается совершенно "корректно". Что за "небезопасная информация"? Какой там "ActiveX"? X3 как обычно :(
Вот, кстати:
http://www.opennet.me/opennews/art.shtml?num=5140
>Вот, кстати:
>http://www.opennet.me/opennews/art.shtml?num=5140Спасибо за ссылку - впечатляет! Возьму на вооружение.