За последние 24 часа нас посетили 16525 программистов и 1180 роботов. Сейчас ищут 2019 программистов ...

Динамический select

Тема в разделе "JavaScript и AJAX", создана пользователем EvelRus, 23 дек 2007.

  1. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Динамический select
    Вот решение:


    HTML:
    1.  
    2. <meta http-equiv="Content-Language" content="ru">
    3. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    4. <script type="text/javascript">
    [js]function syncList()
    {
    }

    //Метод sync() - принимает список из значений атрибутов id элементов SELECT, образующих связанный список и запускает их синхронизацию
    syncList.prototype.sync = function()
    {
    //Перебираем аргументы (id элементов SELECT) и назначаем событиям onChange селектов, с соответствующими id, функцию-обработчик.
    //В качестве обработчика выступает второй метод объекта syncList - _sync (напрямую его вызывать не нужно)
    //Обработчик назначается всем элементам SELECT кроме последнего в списке аргументов, т.к. последний не влияет ни на какой другой элемент SELECT и с ним не нужно синхронизироваться.
    for (var i=0; i < arguments.length-1; i++) document.getElementById(arguments).onchange = (function (o,id1,id2){return function(){o._sync(id1,id2);};})(this, arguments, arguments[i+1]);
    document.getElementById(arguments[0]).onchange();//запускаем обработчик onchange первого селекта, чтобы при загрузке страницы заполнить дочерние селекты значениями.
    }
    //служебный метод _sync - срабатывает при смене выбранного элемента в текущем (старшем) элементе SELECT (по его событию onChange) и изменяет содержимое зависимого селекта на основании значения выбранного в старшем селекте.
    syncList.prototype._sync = function (firstSelectId, secondSelectId)
    {
    var firstSelect = document.getElementById(firstSelectId);
    var secondSelect = document.getElementById(secondSelectId);

    secondSelect.length = 0; //обнуляем второй (подчиненный) SELECT

    if (firstSelect.length>0)//если первый (старший) SELECT не пуст
    {
    //из свойства dataList, с данными для заполнения подчиненных селектов, берем ту часть данных, которая соответствует именно значению элемента,
    //выбранного в первом селекте, и определяет содержимое подчиненного элемента SELECT.
    var optionValue = firstSelect.options[ firstSelect.selectedIndex==-1 ? 0 : firstSelect.selectedIndex].value; var optionData = this.dataList[optionValue]; if (!optionData) optionData = this.dataList[parseInt(optionValue)];
    //заполняем второй (подчиненный) селект значениями (создаем элементы option)
    for (var key in optionData || null) secondSelect.options[secondSelect.length] = new Option(optionData[key], key);

    //если в старшем SELECT-е нет выделенного пункта, выделяем первый
    if (firstSelect.selectedIndex == -1) setTimeout( function(){ firstSelect.options[0].selected = true;}, 1 );
    //если во втором списке нет выделенного пункта, выделяем первый его пункт
    if (secondSelect.length>0) setTimeout( function(){ secondSelect.options[0].selected = true;}, 1 );
    }
    //если второй (подчиненный) селект имеет в свою очередь свои подчиненные селекты (те, для которых он главный),
    //то запускаем его обработчик onchange, чтобы изменить его подчиненные селекты
    secondSelect.onchange && secondSelect.onchange();
    };[/js]
    HTML:
    1. </head>
    2.  
    3. <select size="1" id="action" name="action">
    4. <option value="no_action">Выберите действие</option>
    5. <option value="01">01</option>
    6. <option value="02">02</option>
    7. <option value="03">03</option>
    8. <select size="1" id="ok" name="ok"></select>
    9. <script type="text/javascript">
    [js]
    var syncList1 = new syncList;
    syncList1.dataList =
    {
    '01':
    {
    'n':'Нет', // Значение:надпись в селекте
    'y':'Да'
    },
    'no_action':
    {
    'no_action':'----------'
    },
    '02':
    {
    '02.1':'02.1',
    '02.2':'02.2',
    '02.3':'02.3'
    },
    '03':
    {
    '10':'10',
    '90':'90',
    '100':'100'
    }
    };

    syncList1.sync("action","ok"); // Синхронизация списков
    [/js]
    HTML:
    1.  
    2. </body>
    3. </html>
     
  2. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Это пример для двух селектов... можно сделать и три :)

    Хочу обратить внимание, что второй JS скрипт выполняется ПОСЛЕ формы с select`ами
     
  3. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Nemo
    Замечательный пример, но на старой Опере (7) глючит. Она зачем-то приводит строковые индексы, которые выглядят как числа, к числовому виду. Соответственно вместо индексов типа "01", "02" в массиве dataList появляются индексы 1, 2 и т. д. Помогает патчик:

    вместо
    [js]var optionData = this.dataList[ firstSelect.options[firstSelect.selectedIndex==-1 ? 0 : firstSelect.selectedIndex].value ];[/js]
    пишем
    [js]var optionValue = firstSelect.options[ firstSelect.selectedIndex==-1 ? 0 : firstSelect.selectedIndex].value;
    var optionData = this.dataList[optionValue];
    if (!optionData) optionData = this.dataList[parseInt(optionValue)];[/js]
    и работает уже на всех браузерах. :)
     
  4. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Dagdamor, Огромное спасибо, исправил!!!
     
  5. Bueno

    Bueno Активный пользователь

    С нами с:
    30 окт 2007
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Riga, Latvia
    У меня такой вопрос:

    Можно-ли в данном варианте сделать так чтобы при загрузке страницы уже были выбраны какие-нибудь значения ?

    Код (Text):
    1.  
    2. var syncList1 = new syncList;
    3.  syncList1.dataList =
    4.  {
    5.   '01':
    6.    {
    7.    'n':'Нет', // Значение:надпись в селекте
    8.    'y':'Да'
    9.    },
    10.   'no_action':
    11.    {
    12.    'no_action':'----------'        
    13.    },
    14.   '02':
    15.    {
    16.    '02.1':'02.1':'selected', - К примеру
    17.    '02.2':'02.2',
    18.    '02.3':'02.3'
    19.    },
    20.   '03':
    21.    {
    22.    '10':'10',
    23.    '90':'90',
    24.    '100':'100'
    25.    }
    26.  };
    27.  
    28.  syncList1.sync("action","ok"); // Синхронизация списков
     
  6. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Конечо :)))
    Но сначала надо поставить скрипт и посмотреть.. а потом вопросы ;)
     
  7. Bueno

    Bueno Активный пользователь

    С нами с:
    30 окт 2007
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Riga, Latvia
    Вот скрипт: :)

    [js]function syncList(){}

    syncList.prototype.sync = function()
    {
    for (var i=0; i < arguments.length-1; i++)
    document.getElementById(arguments).onchange = (function (o,id1,id2){return function(){o._sync(id1,id2);};})(this, arguments, arguments[i+1]);
    document.getElementById(arguments[0]).onchange();
    }

    syncList.prototype._sync = function (firstSelectId, secondSelectId)
    {
    var firstSelect = document.getElementById(firstSelectId);
    var secondSelect = document.getElementById(secondSelectId);

    secondSelect.length = 0;

    if (firstSelect.length>0)
    {
    var optionValue = firstSelect.options[ firstSelect.selectedIndex==-1 ? 0 : firstSelect.selectedIndex].value;
    var optionData = this.dataList[optionValue];
    if (!optionData) optionData = this.dataList[parseInt(optionValue)];
    for (var key in optionData || null) secondSelect.options[secondSelect.length] = new Option(optionData[key], key);
    if (firstSelect.selectedIndex == -1) setTimeout( function(){ firstSelect.options[0].selected = true;}, 1 );
    if (secondSelect.length>0) setTimeout( function(){ secondSelect.options[0].selected = true;}, 1 );
    secondSelect.onchange && secondSelect.onchange();
    }
    };[/js]

    HTML:
    1. <select name="step1" size="7" id="List1">
    2. <option value=1>Комплектующие</option>
    3. <select name="step2" size="7" id="List2"></select>
    4. <select name="step3" size="7" id="List3"></select>
    5. <script type="text/javascript">
    6. var syncList1 = new syncList;
    7. syncList1.dataList = {
    8.  
    9.  
    10. '1':{
    11. '2':'Процессоры',
    12. '3':'Материнки',
    13. '4':'Оперативка',
    14. '5':'Видео карты',
    15. '6':'Жёсткие диски',
    16. '7':'СД Приводы',
    17. '8':'Звуковые карты',
    18. '9':'Сетевые карты',
    19. '10':'Корпуса',
    20. '11':'Блоки питания'
    21. },
    22.  
    23. '2':{
    24. '12':'Pentium 4',
    25. '13':'Pentium D',
    26. '14':'Core 2 Duo',
    27. '15':'Core 2 Quad',
    28. '16':'Celeron D',
    29. '17':'Athlon XP',
    30. '18':'Athlon 62 x2'
    31. }
    32.  
    33. };
    34.  
    35. syncList1.sync("List1","List2","List3");
    36.  
     
  8. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    и что?? :)))все работает...
     
  9. Bueno

    Bueno Активный пользователь

    С нами с:
    30 окт 2007
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Riga, Latvia
    Как к примеру сделать это:

    HTML:
    1.  '15':'Core 2 Quad':'selected',
    - или как то по другому ...

    Я в javascript не силён.

    Если не сложно скажи ... :) или хотя бы скажи где копать :)

    [js]var optionValue = firstSelect.options[ firstSelect.selectedIndex==-1 ? 0 : firstSelect.selectedIndex : firstSelect.selectedIndex==selected].value; <- бред :)[/js]
     
  10. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    никак:))) Если надо что бы ЭТО было первым.. поставь первым пунктом :)
     
  11. Bueno

    Bueno Активный пользователь

    С нами с:
    30 окт 2007
    Сообщения:
    73
    Симпатии:
    0
    Адрес:
    Riga, Latvia
    Всё ок, так и сделал.

    Спасибо!
     
  12. wildrain

    wildrain Активный пользователь

    С нами с:
    6 янв 2008
    Сообщения:
    12
    Симпатии:
    0
    а вот ещё вариант. мне кажется он более удобен в использовании
    Код (Text):
    1.  
    2. <form name="modelform">
    3.  
    4. <td valign=top><select class=select onchange="modelform_rebuild(this.options[this.selectedIndex].value)"><option value="0">---
    5. <option value="30">Toyota
    6. <option value="31">Nissan
    7. <option value="33">Mitsubishi
    8. <option value="34">Honda
    9. <option value="35">Mazda
    10. <option value="32">Subaru
    11. <option value="36">Suzuki
    12. <option value="37">Isuzu
    13.  
    14. </select>
    15. <select name="models_id" class=select><option value="0">---</select>
    16. <script language="javascript">
    17.  
    18. function modelform_rebuild(b){
    19. switch (b) {
    20. case '0':
    21. with (modelform.models_id) {
    22. options.length = 0;
    23. options[0] = new Option('---', '0');
    24. selectedIndex = 0;
    25. }; break;
    26. case '30': with (modelform.models_id) {
    27.     options.length= 0;
    28.     options[0]= new Option('---','0');
    29.     options[1]= new Option('Allex','479');
    30.     options[2]= new Option('Allion','424');
    31.     options[3]= new Option('Alphard','489');
    32.     selectedIndex=0;
    33.         }; break;
    34. case '31': with (document.modelform.models_id) {
    35.     options.length= 0;
    36.     options[0]= new Option('---','0');
    37.     options[1]= new Option('180SX','630');
    38.     options[2]= new Option('Ad Wagon','637');
    39.     options[3]= new Option('Atlas','1033');
    40.     options[4]= new Option('Avenir','638');
    41.     options[5]= new Option('Bassara','607');
    42.     selectedIndex=0;
    43.         }; break;
    44. case '33': with (document.modelform.models_id) {
    45.     options.length= 0;
    46.     options[0]= new Option('---','0');
    47.     options[1]= new Option('Airtrek','862');
    48.     options[2]= new Option('Aspire','885');
    49.     options[3]= new Option('Bravo','855');
    50.  
    51.     selectedIndex=0;
    52.         }; break;
    53. case '34': with (document.modelform.models_id) {
    54.     options.length= 0;
    55.     options[0]= new Option('---','0');
    56.     options[1]= new Option('Accord','744');
    57.     options[2]= new Option('Accord Coupe','729');
    58.     options[3]= new Option('Accord Inspire','745');
    59.     selectedIndex=0;
    60.         }; break;
    61. case '35': with (document.modelform.models_id) {
    62.     options.length= 0;
    63.     options[0]= new Option('---','0');
    64.     options[1]= new Option('Atenza Sedan','822');
    65.     options[2]= new Option('Atenza Sport','823');
    66.     options[3]= new Option('Atenza Sport Wagon','821');
    67.     selectedIndex=0;
    68.         }; break;
    69. case '32': with (document.modelform.models_id) {
    70.     options.length= 0;
    71.     options[0]= new Option('---','0');
    72.     options[1]= new Option('Alcyone','573');
    73.     selectedIndex=0;
    74.         }; break;
    75. case '36': with (document.modelform.models_id) {
    76.     options.length= 0;
    77.     options[0]= new Option('---','0');
    78.     options[1]= new Option('Aerio Sedan','524');
    79.     options[2]= new Option('Aerio Wagon','533');
    80.     selectedIndex=0;
    81.         }; break;
    82. case '37': with (document.modelform.models_id) {
    83.     options.length= 0;
    84.     options[0]= new Option('---','0');
    85.     options[1]= new Option('Aska','758');
    86.     options[2]= new Option('Bighorn','766');
    87.     options[3]= new Option('Elf','951');
    88.  
    89.     selectedIndex=0;
    90.         }; break;
    91.  
    92.  
    93. }
    94. }
    95.  
    96. </script>
    тут и выбрать можно какую-либо строку.
     
  13. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Вот только комментариев к коду не хватает ;)))
    Непонятно что откуда и что куда :)
     
  14. Dr.Freez

    Dr.Freez Активный пользователь

    С нами с:
    2 июл 2007
    Сообщения:
    48
    Симпатии:
    0
    Адрес:
    Иркутск
    как в последнем скрипте повиксить баг с оперой? там пустые поля добавляються
     
  15. Ивашка

    Ивашка Активный пользователь

    С нами с:
    29 авг 2007
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Щёкино/Тула
    Тут всё дело в кривоватом рендеринге Оперы.
    Как ни странно, лечение заключается в том, что надо скрыть а затем показать второй селект :)
    Код (Text):
    1.  
    2. function modelform_rebuild(b){
    3. ...
    4. ...
    5. modelform.models_id.style.display = 'none';
    6. modelform.models_id.style.display = '';
    7. }
     
  16. Kocapb

    Kocapb Активный пользователь

    С нами с:
    10 июл 2008
    Сообщения:
    169
    Симпатии:
    0
    Nemo
    привет слушай а как сделать так чтобы Select из БД считывал значения я тольео для 1ого Selecta освоил:
    Код (Text):
    1.  
    2. <select name="category">
    3. <?php
    4.  
    5. if ($res = mysql_query("SELECT * FROM `categories` ORDER BY `name`"))
    6. {
    7.     while ($row = mysql_fetch_assoc($res))
    8.     {
    9.         echo '<option value="'.$row['id'].'">'.$row['name'].'</option>';
    10.     }
    11. }
    12.  
    13. ?>
    14. </select>
    и мне надо чтобы 2ой Select обновлялся при выборе 1ого. Буду благодарен за помощь
     
  17. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Мне кажется, что вам удобнее использовать скрипт от Bueno
     
  18. Feanor1982

    Feanor1982 Активный пользователь

    С нами с:
    20 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    Есть у меня небольшая формочка, сформированная на PHP. Её HTML вид может выглядеть вот так
    Код (Text):
    1.  
    2. <form method=Post action=/1/admin.php enctype="multipart/form-data" name="setevent">
    3. <input type="hidden" name="submitted" value=false;>
    4. <table>
    5. <tr>
    6. <td>
    7. Название события
    8. </td>
    9. <td>
    10. <input type="text" name="event_name">
    11. </td>
    12. </tr>
    13. <tr>
    14. <td>
    15. Место проведения
    16. </td>
    17. <td>
    18. <input type="text" name="country">
    19. </td>
    20. </tr>
    21. <tr>
    22. <td>
    23. Изображение
    24. </td>
    25. <td>
    26. <input type="file", name="image">
    27. </td>
    28. </tr>
    29. </table>
    30. Дата проведения
    31. <select name="day" size="1">
    32. <script language="JavaScript">
    33. for(var i=1;i<=31;i++)document.write("<option value="+i+">"+i+"</option>");
    34. </script>
    35. </select>
    36. <select name="month" size="1" onchange="yearchange()">
    37. <option value="1">январь</option>
    38. <option value="2">февраль</option>
    39. <option value="3">март</option>
    40. <option value="4">апрель</option>
    41. <option value="5">май</option>
    42. <option value="6">июнь</option>
    43. <option value="7">июль</option>
    44. <option value="8">август</option>
    45. <option value="9">сентябрь</option>
    46. <option value="10">октябрь</option>
    47. <option value="11">ноябрь</option>
    48. <option value="12">декабрь</option>
    49. </select>
    50. <input type="text" name="year" onchange="yearchange()">года
    51. <br>
    52. Содержание
    53. <br>
    54. <Textarea name="content" rows="40" cols="40">
    55.  
    56. </Textarea>
    57. <br>
    58. Тип события <select name="type_event" size="1">
    59.  
    60. <option value=Обувь>Обувь</option><option value=Одежда>Одежда</option><option value=Авто>Авто</option><option value=Спорт>Спорт</option><option value=Мото>Мото</option><option value=Здоровье>Здоровье</option><option value=Бизнес>Бизнес</option></select>
    61. <br>
    62. <input type="button" value="Сохранить" onclick="setevent.submitted=true;yearchange();">
    63. </form>
    В ней есть селекты с выбором дня и месяца года. Для того, чтобы дней в месяце всегда было столько сколько нужно (с учётом високосных годов) написал следующий функции на JS
    Код (Text):
    1.  
    2. <script Language="Javascript">
    3. function yearchange(){
    4. var days=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    5. if(setevent.submitted||(setevent.month.value==2)){
    6. if(!isFinite(setevent.year.value)||setevent.year.value<0){alert("Введите правильно год");
    7. return;}else{if(!(year.value%4))days[1]=29;}}}
    8. if(setevent.day.options.length>0)while(setevent.day.options.length>0)setevent.day.options.remove(setevent.day.options.length-1);
    9. for(var i=1;i<days[setevent.month.value-1];i++){var option=document.CreateElement("OPTION");
    10. option.text=i;
    11. option.value=i;
    12. setevent.day.options.add(option);
    13. if(setevent.submitted)setevent.submit;}
    14. </script>
    Проблема в том, что на неправильные символы в инпуте для года функция, как ей и положено ругается, а вот заставить её менять количество дней в соответствующем селекте у меня так и не получилось. Не подскажете, почему?
     
  19. kostyl

    kostyl Guest

    Nemo
    Так что ж это за динамический сэлект если в syncList1.dataList надо помещать все значения, а если их там 10000?
     
  20. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
  21. kostyl

    kostyl Guest

    Luge
    спасибо, но чёто свое хочецца... :)
     
  22. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Хочется, делай...
     
  23. kostyl

    kostyl Guest

    [js]
    <!--это список регионов по изменению которого в таком же списке только
    с id=city обновляются города соответственно id выбранного региона,
    значение которого находиться естественно в value optionа -->
    <select name="region" id="region" onChange="UpdateSelect('city', this.value);">
    <script type="text/javascript">
    //Далее следуют функции для ассинхронного обмена - реального динамического селекта
    //Эта функция создает объект которым пользуется браузер для посылания скрипту ассинхронного запроса
    function CreateXMLHttpRequestObject()
    {
    var xmlHttp;
    try
    {
    xmlHttp = new XMLHttpRequest();
    }
    catch(e)
    {
    var XMLHttpVersions = new Array('MSXML2.XMLHTTP.6.0',
    'MSXML2.XMLHTTP.5.0',
    'MSXML2.XMLHTTP.4.0',
    'MSXML2.XMLHTTP.3.0',
    'MSXML2.XMLHTTP',
    'Microsoft.XMLHTTP');
    for(var i=0; i<XMLHttpVersions.length && !xmlHttp; i++) {
    try
    {
    xmlHttp = new ActiveXObject(XMLHttpVersions);
    }
    catch(e) {}
    }
    }
    if(!xmlHttp) {
    alert("Ваш браузер не поддерживает ассинхронную передачу");
    }
    else {
    return xmlHttp;
    }
    }
    //Создается ранее упомянутый объект
    //Обратите внимание - он с глобальной областью видимости
    var xmlHttp = CreateXMLHttpRequestObject();
    //Эта функция очишает список по его id и присваивает ему значение по улолчанию
    function ClearSelect(select_id)
    {
    var selElement = document.getElementById(select_id);
    selElement.options.length = 0;
    selElement.options[selElement.options.length] = new Option("значение по умолчанию", 0, false, false);
    }
    //Это самая главная функция
    //Она настраивает параметры ассинхронного запроса: xmlHttp.open
    //определяет функцию обработчик событий изменения состояния запроса:xmlHttp.onreadystatechange
    //ну и посылает запрос xmlHttp.send
    function UpdateSelect(select_id, parent_select_value)
    {
    if(!xmlHttp) {
    return false;
    }
    if(parent_select_value == 0) {
    if(select_id == 'city') {
    ClearSelect('city');
    }
    else {
    ClearSelect('region');
    ClearSelect('city');
    }
    return true;
    }
    try
    {
    switch (select_id) {
    case 'city':
    var uri = "./userlive.php?r=" + parent_select_value;
    break;
    case 'region':
    var uri = "./userlive.php?s=" + parent_select_value;
    break;
    default:
    return false;
    break;
    }
    xmlHttp.open("GET", uri, true);
    xmlHttp.onreadystatechange = function()
    {
    if(xmlHttp.readyState == 4) {
    if(xmlHttp.status == 200) {
    try
    {
    ProcessXMLResponse(select_id);
    }
    catch(e)
    {
    ClearSelect(select_id);
    }
    }
    else {
    ClearSelect(select_id);
    }
    }
    }
    xmlHttp.send(null);
    }
    catch(e)
    {
    ClearSelect(select_id);
    return false;
    }
    return true;
    }
    //Эта функция вызывается обработчиком события изменения состояния запроса
    //При xmlHttp.readyState == 4 браузер получил ответ
    //Фактически эта функция получает xml обект и парсит его генерируя новые option - ы в select - е
    //В данном случае скрипт userlive.php возращает xml документ такого характера
    //<?xml ....и все такое
    //<cities>
    //<city>
    //<id>5</id>
    //<name>Москва</name>
    //</city>
    //******Остальная куча городов
    //</cities>
    function ProcessXMLResponse(select_id)
    {
    var xmlResponse = xmlHttp.responseXML;
    if(!xmlResponse || !xmlResponse.documentElement) {
    throw("Ошибка на сервере");
    }
    var rootNodeName = xmlResponse.documentElement.nodeName;
    if(rootNodeName == "parsererror") {
    throw("Ошибка на сервере");
    }
    xmlRoot = xmlResponse.documentElement;
    idArray = xmlRoot.getElementsByTagName("id");
    nameArray = xmlRoot.getElementsByTagName("name");
    var selElement = document.getElementById(select_id);
    selElement.options.length = 0;
    selElement.disabled = false;
    if(idArray.length<1) {
    if(select_id == 'city') {
    ClearSelect('city');
    }
    else {
    ClearSelect('region');
    ClearSelect('city');
    }
    return;
    }
    for(var i = 0; i<idArray.length; i++) {
    selElement.options[selElement.options.length] = new Option(nameArray.item(i).firstChild.data, idArray.item(i).firstChild.data, false, false);
    }
    }
    </script>
    [/js]
     
  24. ali_hacker

    ali_hacker Активный пользователь

    С нами с:
    23 дек 2008
    Сообщения:
    3
    Симпатии:
    0
    Спасибо, помог мне первый скрипт, только я не понял как добавить 3-й select.
     
  25. EvelRus

    EvelRus Активный пользователь

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Добавить третий айди :))