Создание списка

  • Автор темы Автор темы Chupa
  • Дата начала Дата начала

Chupa

Guest
Создание списка

Подскажите, пожалуйста, как реализовать такую штуку.
У меня есть список (select) городов, который выводится из таблицы БД типа
<select name=city>
<option value=$row['cityID']>$row['city']</option>
</select>
Далее у меня идет список, в котором должны отображаться экскурсии для данного города из общего списка экскурсий. Так проблема собственно в том, что не знаю как сделать, чтоб при различном выборе города, отображались различные экскурсии. А если быть точнее, то охота сделать так, чтоб это все происходило без обновления страницы. Наверное надо JS? А как JS работает с БД (90% уверен, что никак)? Или этот вопрос не в этот форум?
 
js с бд никак не работает.
все данные о всех экскурсиях заранее передаются в js. Т.е. получается давольно толстая страница и стоит подумать действительно ли делать без перегрузки выгодно.
 
Данных там передается не так уж и много. Около 40-50 записей. Может выводить брать базы весь список, а потом уже JS смотреть подходит эта экскурсия или нет...
 
в принципе можно сделать iframe и или фрейм и через него выполнять подгрузку необходимых данных
 
У меня и так есть фрейм слева-навигация, так что еще один не подойдет. Ну так что? Нет никаких вариантов? Для этой цели лучше, наверное, использоваь java.
 
не надо ни фреймов ни явы.
ты же сам сказал, вытаскивать весь список, потом яваскриптом проверять. Можешь поискать готовые скрипты их давольно много.
 
Я то сказал, а вот как сделать незнаю. Может подскажите.
 
Если список городов невелик, можно сделать так (без всякого JS):
таблица
строка

радиобаттон (name=city value=cityID)
имя города
селект с экскурсиями для этого города

/строка
...
/таблица

Пользователь радибаттоном выбирает город, и для этого города выбирает в селекте экскурсию.
 
Нет, это не подойдет. Так как на страницу выводиться много строк, в каждой из которых есть список городов и список экскурсий.
 
Тогда смотри PEAR::HTML_QuickForm - там есть реализация для такого "двойного" селекта - скорее всего, тебе нужно будет только JS-код оттуда взять. Я бы мог тебе скинуть свой собственный вариант, но он давнишний и мне он был нужен только под IE - тебе вряд ли подойдет.
 
По идее тебе нужно при изменении одного селекта заново строить другой.
То есть что-то такое:
Удаление опции:
selectName.options = null;

Создание новой:
opt = new Option(текст, значение);
selectName.options=opt;

Где текст-значение сидят и ждут своей очереди со времени загрузки...
 
crocodile2u, скинь плиз на [email protected] - я посмотрю.
virakochi, а поподробнее немножко можно. Допустим, у меня есть только один селект сгородами. Когда я выбираю город - справа появляется новый список с экскурсиями. Так можно сделать?

-~{}~ 07.07.04 22:06:

Скажите, пожалуйста, как мне связать переменну JS и переменну PHP? У меня есть такой код:

function newOpt(){
cityID = document.add.begin_city.options[document.add.begin_city.selectedIndex].value;
<? $num_excursions=mysql_num_rows(mysql_query("SELECT * FROM $mysql_table_excursii WHERE cityID=здесь должнабыть JS переменная"));?>
for(var i=0;i< <?=$num_excursions;?>;i++){
opt = new Option(i, 1);
document.add.selection.options=opt;
}
}
 
Chupa
На ohChange первого селекта вешаешь удаление старого второго списка + создание нового, инфа для которого выбирается в зависимости от выбранного элемента первого списка.
 
Originally posted by Chupa
Скажите, пожалуйста, как мне связать переменну JS и переменну PHP? У меня есть такой код:
убей этот код и больше его не реанимируй. увидит Фанат - туго тебе будет...
 
Аа.. счастье твое :))

PHP:
<script type="text/javascript">
<!--
// далее у нас следует массив из улиц, содержащих дома, разделённые запятой
var aHouseValues = new Array(
"12/15,18,123",
"2,4",
"2/8,10/12",
"3",
"2,4,12,5/6,8"
);

// ф-ция, возвращающая массив домов по заданной улице
function getHouseValuesByStreet(index){
    var sHouseValues = aHouseValues[index];
    return sHouseValues.split(","); // преобразуем строку в массив домов
}

// главная ф-ция, выводящая динамически список домов
function MkHouseValues(index){
    var aCurrHouseValues = getHouseValuesByStreet(index);
    var nCurrHouseValuesCnt = aCurrHouseValues.length;
    var oHouseList = document.forms["address"].elements["house"];
    var oHouseListOptionsCnt = oHouseList.options.length;
    oHouseList.length = 0; // удаляем все элементы из списка домов
    for (i = 0; i < nCurrHouseValuesCnt; i++){
        // далее мы добавляем необходимые дома в список
        if (document.createElement){
            var newHouseListOption = document.createElement("OPTION");
            newHouseListOption.text = aCurrHouseValues[i];
            newHouseListOption.value = aCurrHouseValues[i];
            // тут мы используем для добавления элемента либо метод IE, либо DOM, которые, alas, не совпадают по параметрам…
            (oHouseList.options.add) ? oHouseList.options.add(newHouseListOption) : oHouseList.add(newHouseListOption, null);
        }else{
            // для NN3.x-4.x
            oHouseList.options[i] = new Option(aCurrHouseValues[i], aCurrHouseValues[i], false, false);
        }
    }
}

// инициируем изменение элементов в списке домов, в зависимости от текущей улицы
MkHouseValues(document.forms["address"].elements["house"].selectedIndex);
//-->
</script>
фОРМА
PHP:
<form name="address" action="#">
Улица:
<select name="street" onChange="MkHouseValues(this.selectedIndex)">
<option value="ул. Хрюнделя">ул.&nbsp;Хрюнделя</option>
<option value="пер. Неизвестного">пер.&nbsp;Неизвестного</option>
<option value="ул. Оттопыркина">ул.&nbsp;Оттопыркина</option>
<option value="ул. Мир-Труд-Май">ул.&nbsp;Мир-Труд-Май</option>
<option value="бул. Нихренасебефамилия">бул.&nbsp;Нихренасебефамилия</option>
</select>
&nbsp;Дом:
<select name="house">
<option value="N/A">N/A</option>
</select>
</form>
 
voland, так получается, что у тебя первой записи в <option> соответствует первый элемент масссива, что не есть хорошо.
 
что у тебя первой записи в <option> соответствует первый элемент масссива
А как ты ещё хотел? Надо ведь для начала что-то прогрузить. Потом он будет соответствовать тому который выберешь...
З.Ы. А ты что хочешь? Я чё то не пойму...
 
voland, у тебя есть конкретная привязка: первая улица - первый элемент массива. Мне то нужно немножко не-то...
 
Сверху