$( ‘#group_category’ ).change(function () {
// При изменении значения первого списка мы должны удалить
// все имеющиеся значения во втором и третьем, а также
// сделать их неактивными
$( ‘#first_subcategory, #duble_subcategory, #three_subcategory, #four_subcategory’ ).find( ‘option:not(:first)’ ) // Ищем все теги option, не являющиеся тегом по умолчанию
.remove() // Удаляем эти теги
// Чтобы сделать поля неактивными, неправильно менять значение атрибута disabled
// Теперь нам нужно изменять значение свойства disabled объектов полей списка,
// так как мы работаем с ними через библиотеку jQuery
.end() // Возвращаемся к исходному объекту
.prop( ‘disabled’,true ); // Делаем поля неактивными
// Сохраним выбранное значение списка в переменную
var first_id = $( this ).val();
// Если выбрано значение по умолчанию, ничего не делаем
if (first_id == 0) { return; }
// В ином случае нам необходимо отправить запрос на сервер
// AJAX-запрос к серверу мы выполним, используя метод jQuery ajax()
$.ajax({
type: «POST», // Тип запроса
url: «./include/querycat.php», // Путь к сценарию, обработающему запрос
dataType: «json», // Тип данных, в которых сервер должен прислать ответ
data: «query=getFirst&first_id=» + first_id, // Строка POST-запроса
error: function () { // Обработчик, который будет запущен в случае неудачного запроса
alert( «При выполнении запроса произошла ошибка :(» ); // Сообщение о неудачном запросе
},
success: function ( data ) { // Обработчик, который будет запущен после успешного запроса
// В ответ на наш запрос сервер должен прислать массив значений
// Мы его вставим в поле второго списка с помощью цикла for
for ( var i = 0; i < data.length; i++ ) {
// Каждое полученное значение вставим в список видов транспорта
$( '#first_subcategory' ).append( '‘ );
}
// После того, как мы сформировали список, мы можем сделать его активным
// обратившись к его свойству disabled
$( ‘#first_subcategory’ ).prop( ‘disabled’, false ); // Включаем поле
}
});
});
$firsts = array(
1 => array(
// Наземный транспорт
1 => ‘Железнодорожный транспорт’,
2 => ‘Автомобильный транспорт’,
3 => ‘Ручной транспорт’
),
2 => array(
// Водный транспорт
1 => ‘Речной транспорт’,
2 => ‘Морской транспорт’,
3 => ‘Подводный транспорт’
),
3 => array(
// Воздушный транспорт
1 => ‘Самолеты’,
2 => ‘Вертолеты’,
3 => ‘Ракета (шаттл)’
)
);
$kinds = array(
// Наземный транспорт
1 => array(
// Железнодорожный транспорт
1 => array(
1 => ‘Электропоезд’,
2 => ‘Дизельный поезд’,
3 => ‘Дрезина’
),
// Автомобильный транспорт
2 => array(
1 => ‘Легковой автомобиль’,
2 => ‘Грузовой автомобиль’,
3 => ‘Автобус’
),
// Ручной транспорт
3 => array(
1 => ‘Тачка’,
2 => ‘Тележка’,
3 => ‘Велосипед’
)
),
// Водный транспорт
2 => array(
// Речной транспорт
1 => array(
1 => ‘Трамвай’,
2 => ‘Теплоход’,
3 => ‘Ракета’
),
// Морской транспорт
2 => array(
1 => ‘Крейсер’,
2 => ‘Круизный лайнер’,
3 => ‘Баржа’
),
// Подводный транспорт
3 => array(
1 => ‘Подводная лодка’,
2 => ‘Батискаф’,
3 => ‘Капсула смерти’
)
),
// Воздушный транспорт
3 => array(
// Самолет
1 => array(
1 => ‘Боинг’,
2 => ‘Аэробус’,
3 => ‘Руслан’
),
// Вертолеты
2 => array(
1 => ‘МИ’,
2 => ‘Апач’,
3 => ‘Черная акула’
),
// Ракета (шаттл)
3 => array(
1 => ‘Союз’,
2 => ‘Апполон’,
3 => ‘Дискавери’,
4 => ‘Буран’
)
)
);
// Проверяем наличие переменной, которая укажет данному сценарию какие именно данные нужны
if (!isset($_POST[‘query’]) || !$_POST[‘query’]) {
exit(«Нет данных определяющих тип запроса»);
}
else {
// Сохраняем строку запроса данных в отдельной переменной
$query = trim($_POST[‘query’]); // Очищаем от лишних пробелов
// Определяем тип запроса
switch($query) {
case ‘getFirst’: // Запрос на получение 1ой подкатегории
// Сохраним в переменную значение выбранного типа
$first_id = trim($_POST[‘first_id’]); // Очистим его от лишних пробелов
// Формируем массив с ответом
$result = NULL;
$i = 0;
foreach ($firsts[$first_id] as $kind_id => $kind) {
$result[$i][‘kind_id’] = $kind_id;
$result[$i][‘kind’] = $kind;
$i++;
}
break;
case ‘getCategories’: // Запрос на получение видов транспорта
// Сохраним в переменные значения выбранных типа транспорта и вида транспорта
$type_id = trim($_POST[‘type_id’]); // Очистим их от лишних пробелов
$kind_id = trim($_POST[‘kind_id’]);
// Формируем массив с ответом
$result = NULL;
$i = 0;
foreach ($kinds[$type_id][$kind_id] as $category_id => $category) {
$result[$i][‘category_id’] = $category_id;
$result[$i][‘category’] = $category;
$i++;
}
break;
default:
// Если данные не определены
$result = NULL;
break;
}
}
// Преобразуем данные в формат json, чтобы их смог обработать JavaScript-сценарий, приславший запрос
echo json_encode($result);