ФорумПрограммированиеPHP для идиотов → Как отсортировать поле по выбору из предидущего?

Как отсортировать поле по выбору из предидущего?

  • Alco

    Сообщения: 19 Репутация: N Группа: Кто попало

    Spritz 16 декабря 2008 г. 9:16, спустя 2 часа 39 секунд

    Вот вроде нашел мож кому понадобится
    HTML: 
    <html>
     
    <head>
    <meta http-equiv="Content-Language" content="ru">
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <script type="text/javascript">


    JavaScript:
    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();
    };


    HTML:
    </script>
    </head>
     
    <body>
    <select size="1" id="action" name="action">
    <option value="no_action">Выберите действие</option>
    <option value="01">01</option>
    <option value="02">02</option>
    <option value="03">03</option>
    </select>
    <select size="1" id="ok" name="ok"></select>
    <script type="text/javascript">


    JavaScript:
    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"); // Синхронизация списков


    HTML:
    </script>
    </body>
    </html>

  • Alco

    Сообщения: 19 Репутация: N Группа: Кто попало

    Spritz 17 декабря 2008 г. 2:12, спустя 16 часов 55 минут 40 секунд

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 декабря 2008 г. 2:27, спустя 15 минут 24 секунды

    Alco, в точку! ))
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!