<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>四级联动菜单</title>

    </head>
    <body>
        <h2>四级联动</h2>
        <!-- 一级 -->
        <select id="chose" οnchange="change(selectedIndex)">
            <!-- 为select设置onchange事件并调用函数,函数中的实参就是selected index属性 -->
        </select>
        <!-- 二级 -->
        <select id="choses" οnchange="changes(selectedIndex)">
        </select>
        <select id="Child" οnchange="change_num(selectedIndex)">
        </select>
        <select id="Childs">
        </select>
        <script>
            //一维数组
            var high = ["请选择...", "美食", "景点", "电影"];
            //二级联动二维数组
            var middle = [
                ["请选择..."],
                ["黄焖鸡", "油焖大虾", "红烧肉", "东坡肉"],
                ["黄山", "泰山", "嵩山", "华山"],
                ["烈日灼心", "逆战", "无间道"]
            ];
            //三级联动三级数组
            var litte = [
                [
                    ["请选择..."]
                ],

                [
                    ['大份', '中份', '小份', 'kk'],
                    ['大龙虾', '皮皮虾', '饼饼瞎', 'll'],
                    ['大肥肉', '五花肉', '饼饼脸上肉', 'slfk'],
                    ['饼饼大肥肉', '饼加肉', '啵啵多的肉', 'io']
                ],
                [
                    ['矿泉水', '饼饼霸王串', '啵啵奶茶'],
                    ['丙波饭馆', '丙波精品小屋', '丙波海盗船', '武大郎烧饼'],
                    ['峨嵋派', '丙波派', '巧克力派'],
                    ['葵花宝典', '吸星大法', '令狐饼']
                ],
                [
                    ['邓超', '大饼'],
                    ['张杰', '刘德华', '王波波'],
                    ['古天乐', '张家辉', '铜锣湾']
                ]
            ]
            //四级联动四为数组,四维数组创建的时候容易乱,大家要注意创建四维数组不要搞错了;
            var last = [
                [
                    [
                        ['请选择..']
                    ]
                ],
                [
                    [
                        ['1-1', '1-1', '1-1', '1-1'],
                        ['1-1-1', '1-1-1', '1-1-1', '1-1-1'],
                        ['1-1-1', '1-1-1', '1-1-1', '1-1-1'],
                        ['1-1-1', '1-1-1', '1-1-1', '1-1-1']
                    ],
                    [
                        ['1-2', '1-2', '1-2', '1-2'],
                        ['1-2', '1-2', '1-2', '1-2'],
                        ['1-2', '1-2', '1-2', '1-2'],
                        ['1-2', '1-2', '1-2', '1-2']
                    ],
                    [
                        ['1-3', '1-3', '1-3', '1-3'],
                        ['1-3', '1-3', '1-3', '1-3'],
                        ['1-3', '1-3', '1-3', '1-3'],
                        ['1-3', '1-3', '1-3', '1-3']
                    ],
                    [
                        ['1-4', '1-4', '1-4', '1-4'],
                        ['1-4', '1-4', '1-4', '1-4'],
                        ['1-4', '1-4', '1-4', '1-4'],
                        ['1-4', '1-4', '1-4', '1-4']
                    ]
                ],
                [
                    [
                        ['2-20', '2-20', '2-20', '2-20'],
                        ['2-14', '2-14', '2-14', '2-14'],
                        ['2-68', '2-44', '2-44', '2-44']

                    ],
                    [
                        ['2-8', '8-8', '8-8', '8-8'],
                        ['2-4', '4-4', '4-4', '4-4'],
                        ['2-9', '9-9', '9-9', '2-2'],
                        ['2-5', '5-5', '5-5', '5-5']
                    ],
                    [
                        ['2-3', '2-3', '2-3', '2-3'],
                        ['2-3', '2-3', '2-3', '2-3'],
                        ['2-3', '2-3', '2-3', '2-3']

                    ],
                    [
                        ['2-4', '2-4', '2-4', '2-4'],
                        ['2-4', '2-4', '2-4', '2-4'],
                        ['2-4', '2-4', '2-4', '2-4']
                    ]
                ],
                [
                    [
                        ['琴师', '剑客', '画师', '异人'],
                        ['3-1', '3-1', '3-1', '3-1'],
                    ],
                    [
                        ['3-2', '3-2', '3-2', '3-2'],
                        ['3-9', '3-9', '3-9', '3-9'],
                        ['3-8', '3-8', '3-8', '3-8']
                    ],
                    [
                        ['3-7', '7-7', '7-7', '7-7'],
                        ['3-34', '34-34', '34-34', '34-34'],
                        ['3-35', '35-35', '35-35', '35-35']
                    ]
                ]
            ];
            var chose = document.getElementById("chose"); //通过id获取获取一级联动的下拉列表
            var choses = document.getElementById("choses"); //通过id获取获取二级联动的下拉列表
            var Child = document.getElementById("Child");//通过id获取获取三级联动的下拉列表
            var Childs = document.getElementById("Childs");//通过id获取获取四级联动的下拉列表
            //定义一个变量将它的值定义为空,在下面第一个函数中赋值给这个变量,然后在第二个函数中再调用这个变量的话,这个变量的值就是第一个函数中赋予的值
            var num = null;
            var empty = null;
            chose.length = high.length; //把一维长度赋值给下拉列表长度
            for (var i = 0; i < high.length; i++) { 
                chose.options[i].text = high[i]; //利用for循环将一维的数组里面的元素赋值给第一个下拉列表里面的option  
                //options他代表一个select下拉菜单中所有option的集合
            }
            //二级联动长度赋值
            choses.options.length = middle.length; //二维数组的长度赋值给第二个下拉列表的长度
            choses.options[0].text = middle[0]; //把二维数组中第一个元素的值赋给第二个下拉列表的第一个option,以达到第二个select框的初始值为“请选择”        
            //二级联动  change事件
            function change(obj) { //创建一个函数,绑定事件 函数括号内加上形参 obj obj就是点击options对应的下标;
                num = obj;
                choses.length = middle[obj].length; // 二维数组[obj]的长度赋值给第二个下拉列表的长度
                for (var j = 0; j < middle[obj].length; j++) {
                    choses.options[j].text = middle[obj][j]; //再利用for循环遍历出二维数组中里面的元素赋值给第二个下拉列表里面的option;
                }
            }
            //三级联动长度赋值 
            Child.options.length = litte[0][0].length; //三维数组的长度赋值给第三个下拉列表的长度
            Child.options[0].text = litte[0][0];//把三维数组中第一个元素的值赋给第三个下拉列表的第一个option,以达到第三个select框的初始值为“请选择”
            //三级联动  change事件
            function changes(objs) {
                empty = objs;
                Child.length = litte[num][objs].length;//三维数组[objs]的长度赋值给第三个下拉列表的长度
                for (var m = 0; m < litte[num][objs].length; m++) {
                    Child.options[m].text = litte[num][objs][m];//再利用for循环遍历出三维数组中里面的元素赋值给第三个下拉列表里面的option;
                }
            }
            //四级联动长度赋值
            //四级联动跟三级联动原理一样只不过多了一个下标
            Childs.options.length = last[0][0][0].length;
            Childs.options[0].text = last[0][0][0];
            //四级联动   change事件
            function change_num(obj_num) {
                Childs.length = last[num][empty][obj_num].length;
                for (var p = 0; p < last[num][empty][obj_num].length; p++) {
                    Childs.options[p].text = last[num][empty][obj_num][p];
                }
            }
        </script>
    </body>
</html>

四级联动简便思维导图

四级联动详细讲解和代码分析

四级联动详细讲解和代码分析
二级联动流程图

相关文章: