Я сейчас работаю над схожей задачей. Не знаю, пригодится ли, но на всякий случай опишу.
Работаю с 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а (а можно и четыре, и пять, и сколько влезет), связанных фильтрами, работающими на стороне сервера. Сразу же клиенту нужно передавать только районы, которых (будем считать) совсем немного.