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>
Форум → Программирование → PHP для идиотов → Как отсортировать поле по выбору из предидущего?
Как отсортировать поле по выбору из предидущего?
Страницы: ← Предыдущая страница →
-
16 декабря 2008 г. 17:16, спустя 2 часа 39 секунд
Вот вроде нашел мож кому понадобится -
17 декабря 2008 г. 10:12, спустя 16 часов 55 минут 40 секунд
-
Страницы: ← Предыдущая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!