Для этого вы можете использовать библиотеку, такую как knockout.js, которая позволяет разделить код и разметку, что значительно облегчит жизнь. Вот нокаута пример реализации того, что вы ищете: http://jsfiddle.net/pCc9w/4/
Html:
<select data-bind="options:data, optionsText:'name', value:selectedLevel1"></select>
<!--ko with: selectedLevel1 -->
<select data-bind="options:subitems, optionsText:'name', value:$root.selectedLevel2"></select>
<!--/ko-->
<!--ko with: selectedLevel2 -->
<select data-bind="options:subitems, optionsText:'name', value:$root.selectedLevel3"></select>
<!--/ko-->
Javascript:
var data = [
{
name:"level1",
subitems:[
{
name:"level1.1",
subitems:[
{ name:"level1.1.1" },
{ name:"level1.1.2" },
{ name:"level1.1.3" }
]
},
{
name:"level1.2",
subitems:[
{ name:"level1.2.1" },
{ name:"level1.2.2" },
{ name:"level1.2.3" }
]
}]
},
{
name:"level2",
subitems:[
{
name:"level2.1",
subitems:[
{ name:"level2.1.1" },
{ name:"level2.1.2" },
{ name:"level2.1.3" }
]
},
{
name:"level2.2",
subitems:[
{ name:"level2.2.1" },
{ name:"level2.2.2" },
{ name:"level2.2.3" }
]
}]
},
]
var dataViewModel = ko.mapping.fromJS(data);
var mainViewModel = {
data:dataViewModel,
selectedLevel1:ko.observable(),
selectedLevel2:ko.observable(),
selectedLevel3:ko.observable()
}
ko.applyBindings(mainViewModel);
Имейте в виду, что это решает только на стороне клиента часть из проблема. На стороне сервера вам нужно каким-то образом получить массив данных и отправить его клиенту. Вероятно, вы должны использовать структуру MVC. Некоторые примеры - ruby on rails, django, asp.net MVC. PHP также имеет множество фреймворков MVC.
Спасибо, pax! Что делать, если конечный результат после третьего раскрывающегося списка был одинаковым каждый раз? Для чего мне все еще нужно использовать MVC Framework? – user2684799
@ user2684799 Нет проблем, рад помочь. Не забудьте принять/поддержать ответ, если он был полезен. Я предложил использовать структуру MVC на стороне сервера для построения массива данных и для обработки ответа от клиента. Если вы можете сделать это с помощью raw PHP, это тоже хорошо. Однако, если вы чувствуете, что проект может в какой-то момент увеличиться, с самого начала используйте структуру, это значительно облегчит вашу жизнь. – pax162
Эй, спасибо. Вы слышали о Yii Framework? Похоже на то, что я смогу освоить – user2684799