Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как связать два списка на Javascript? (https://javascript.ru/forum/dom-window/35281-kak-svyazat-dva-spiska-na-javascript.html)

Aggao 06.02.2013 10:53

Как связать два списка на Javascript?
 
Здравствуйте уважаемые форумчане. Меня интересует как можно связать два списка (select и их option) из базы данных на Javascript?

---------------
Вот приблизительные данные в БД с именем bd_primer:

Первая таблица country
1. ID (1, 2, 3, ...) INT
2. name (Россия, Украина, Эстония, ...) VARCHAR
3. url (rossia, shvecia, polsha, ....) VARCHAR

Вторая таблица city
1. ID (1, 2, 3, 4, 5, 6, ...) INT
2. id_country (1, 1, 2, 2, 3, 3, ...) INT
3. name (Санкт-Петербург, Москва, Киев, Харьков,Таллин, Нарва, ...) VARCHAR
4. url (spb, moscow, kiev, kharkov, tallinn, narva, ....) VARCHAR
---------------

В файл test.php помещаем select (ы):

$id_city = "ID взятый из таблицы country"
$name_country = "Имя взятое из таблицы country"


$id_country = "ID взятый из таблицы city"
$name_city = "Имя взятое из таблицы city"

<select name="country">
    <option value="id_country">name_country</option>
    <option value="id_country">name_country</option>
    <option value="id_country">name_country</option>
<select>

<select name="city">
    <option value="id_city">name_city</option>
    <option value="id_city">name_city</option>
    <option value="id_city">name_city</option>
<select>


Задача следующая, нужно написать функцию на javascript, которая свяжет select country с select city и отобразить ее в трех файлах, т.е. функцию сохраняем в файле select2.js, подключаем эту функцию в файле header.php, а вывод результата показываем в файле test.php

Скрипт должен быть быстрым и легким, выводить кучу selectov не лучший вариант.


К сожалению я не нашел нужные примеры в интернете, и был вынужден обратиться напрямую к форумчанам. Были похожие примеры, но с более сложными и углубленными задачами, но меня интересует именно этот конкретный случай.

П.с.: за самый шустрый, безопасный и красивый скрипт, выполненный в соответствии с заданием, подарю 200 руб. на Webmoney. Естественно, если он у меня заработает :)

animhotep 06.02.2013 11:12

Цитата:

Сообщение от Aggao
подарю 200 руб

щедрость то какая, помог бы, но мыслей читать пока не умею

Цитата:

Сообщение от Aggao
свяжет select country с select city и отобразить ее в трех файлах, т.е. функцию сохраняем в файле select2.js, подключаем эту функцию в файле header.php, а вывод результата показываем в файле test.php

может я туплю поутру но по моему это набор безсвязных фраз

Aggao 06.02.2013 11:46

Цитата:

Сообщение от animhotep (Сообщение 231924)
щедрость то какая, помог бы, но мыслей читать пока не умею

может я туплю поутру но по моему это набор бессвязных фраз


Что конкретно Вам было не понятно из того, что я написал? Я могу изложить свои бессвязные мысли в другой форме.

рони 06.02.2013 12:51

Вариант ... если у кого будет желание может распихать по файлам
<!DOCTYPE HTML>
<html>
<head>
  <title></title>
  <meta charset="windows-1251" />
<script>
window.onload = function () {
    var country = {
        'ID': [1, 2, 3],
        'name': ['Россия', 'Украина', 'Эстония'],
        'url': ['rossia', 'shvecia', 'polsha']
    },
    city = {
        'ID': [1, 2, 3, 4, 5, 6],
        'id_country': [1, 1, 2, 2, 3, 3],
        'name': ['Санкт-Петербург', 'Москва', 'Киев', 'Харьков', 'Таллин', 'Нарва'],
        'url': ['spb', 'moscow', 'kiev', 'kharkov', 'tallinn', 'narva']
    }

        function set_select(name, arr_text, arr_val) {
            var select = document.getElementsByName(name)[0];
            select.options.length = 0;
            for (var k = 0; k < arr_val.length; k++) {
                select.options[k] = new Option(arr_text[k], arr_val[k]);
            }
        }
  var select = document.getElementsByName('country')[0];
        function change_select() {
            var j = select.selectedIndex || 0,
                name = [],
                url = [];
            j = country['ID'][j]
     for (var i = 0; i < city['id_country'].length; i++) {
                if (city['id_country'][i] == j) {
                    name.push(city['name'][i]);
                    url.push(city['url'][i]);
                }
            }
            set_select('city', name, url)
        }
    set_select('country', country['name'], country['url'])
    change_select()
    select.addEventListener('change', change_select);
}
</script>
</head>
<body>
<select name="country">
</select>
<select name="city">
</select>
</body>
</html>

Aggao 06.02.2013 14:43

Цитата:

Сообщение от рони (Сообщение 231937)
var country = {
        'ID': [1, 2, 3],
        'name': ['Россия', 'Украина', 'Эстония'],
        'url': ['rossia', 'shvecia', 'polsha']
    },
    city = {
        'ID': [1, 2, 3, 4, 5, 6],
        'id_country': [1, 1, 2, 2, 3, 3],
        'name': ['Санкт-Петербург', 'Москва', 'Киев', 'Харьков', 'Таллин', 'Нарва'],
        'url': ['spb', 'moscow', 'kiev', 'kharkov', 'tallinn', 'narva']
    }

Спасибо, все работает. Единственное, мне не понятно, как я могу заменить в этих таблицах рукописные данные, на данные из БД? У меня все это в таблицах Базы Данных находится, мне надо их как-то через переменные отобразить в скрипте. Сможете написать как это сделать?

Aggao 07.02.2013 12:48

'id_country': [1, 1, 2, 2, 3, 3]


Только что пытался связать вывод данных с базы и столкнулся с ошибкой. У Вас вывод id_country идет по порядку 1, 1, 2, 2, 3, 3 и т.д., а нужно реализовать вывод разных цифр, таких как например: 1, 1, 4, 5, 6, 6 и т.д.
Суть в том, что id_country = ID (в таблице country), т.е. две таблицы в базе данных связаны между собой этим (ID) идентификатором.

Сможете помочь с этим вопросом?

рони 07.02.2013 13:07

Цитата:

Сообщение от Aggao
1, 1, 2, 2, 3, 3 и т.д., а нужно реализовать вывод разных цифр, таких как например: 1, 1, 4, 5, 6, 6 и т.д.

порядок здесь никак не влияет на выборку
вы наверно спутали city и country

рони 07.02.2013 13:11

Aggao,

city = {


07 'ID': [1, 2, 3, 4, 5, 6],
это id я совсем неиспользую и непонимаю зачем оно нужно.
выше в коде кое что поправил - смотрите код по новой и
если несработает то что вам нужно -- нерабочий код разместите тут

Aggao 07.02.2013 15:59

Цитата:

Сообщение от рони (Сообщение 232232)
Aggao,

city = {


07 'ID': [1, 2, 3, 4, 5, 6],
это id я совсем неиспользую и непонимаю зачем оно нужно.
выше в коде кое что поправил - смотрите код по новой и
если несработает то что вам нужно -- нерабочий код разместите тут

Спасибо, все работает. Этот id и url вообще не нужны при выводе двух списков, просто сделал, чтобы если пригодиться они были учтены. Спасибо большое. Скажите свой WMR кошелек.


Часовой пояс GMT +3, время: 17:21.