前端实现行业分类四级联动选择表单

实现效果:


 


 

 

部分数据结构:


 

主要页面代码:

 1     <form id="form">
 2         <div id="select-class" name="typeClass">
 3             <select name="main_business_type_0"  id="class-0">
 4                 <option>请选择门类</option>
 5             </select>
 6             /
 7             <select name="main_business_type_1" id="class-1">
 8                 <option>请选择大类</option>
 9             </select>
10             /
11             <select name="main_business_type_2" id="class-2">
12                 <option>请选择中类</option>
13             </select>
14             /
15             <select name="main_business_type_3" id="class-3">
16                 <option>请选择小类</option>
17             </select>
18         </div>
19     </form>

js代码:

        $("#select-class").each(function(){
            var temp_html ;
            var oClass_0 = $(this).find("#class-0")//门类
            var oClass_1 = $(this).find("#class-1")//大类
            var oClass_2 = $(this).find("#class-2")//中类
            var oClass_3 = $(this).find("#class-3")//小类
            var class_0_key_array = [] ;//门类键名组成的数组
            var class_1_key_array = [] ;//大类键名组成的数组
            var class_2_key_array = [] ;//中类键名组成的数组
            var class_0_selected_index = 0 ;
            var class_1_selected_index = 0 ;
            var class_2_selected_index = 0
            //初始化门类
            var class_0_init = function(){
                class_0_key_array = [] ;//初始化门类键名组成的数组
                $.each(classJson , function(key,value){
                    class_0_key_array.push(key) ;
                    temp_html += "<option value='"+value.trade_name+"'>"+value.trade_name+"</option>";
                });
                //渲染门类
                oClass_0.html(temp_html);
                //渲染完成后清空temp_html
                temp_html = "";
                //当门类被选择并初始化后,初始化大类
                class_1_init(class_0_key_array) ;
            };
            //初始化大类
            var class_1_init = function(class_0_key_array){
                //初始化大类键名组成的数组
                class_1_key_array = [] ;                
                //判断由上级往下传的key_array长度是否为0
                if (class_0_key_array.length != 0) {
                    //若key_array长度为0,则说明无需渲染此节点及更深节点,直接往下传空array
                    //若key_array长度不为0,则继续渲染
                    class_0_selected_index = oClass_0.get(0).selectedIndex;//选了第几个
                    $.each(classJson[class_0_key_array[class_0_selected_index]].children , function(key,value){
                        class_1_key_array.push(key) ;
                        temp_html += "<option value='"+value.trade_name+"'>"+value.trade_name+"</option>";
                    });
                }
                //渲染大类
                oClass_1.html(temp_html) ;
                //渲染完成后清空temp_html
                temp_html = "";
                //当大类被选择并初始化后,初始化中类
                class_2_init(class_1_key_array) ;
            };
            //初始化中类
            var class_2_init = function (class_1_key_array){
                //初始化中类键名组成的数组
                class_2_key_array = [] ;
                //判断由上级往下传的key_array长度是否为0
                if (class_1_key_array.length != 0) {
                    //若key_array长度为0,则说明无需渲染此节点及更深节点,直接往下传空array
                    //若key_array长度不为0,则继续渲染
                    class_1_selected_index = oClass_1.get(0).selectedIndex ;//选择了第几个
                    $.each(classJson[class_0_key_array[class_0_selected_index]].children[class_1_key_array[class_1_selected_index]].children , function(key,value){
                        class_2_key_array.push(key) ;
                        temp_html += "<option value='"+value.trade_name+"'>"+value.trade_name+"</option>";
                    });
                }
                //渲染中类
                oClass_2.html(temp_html);
                //渲染完成后清空temp_html
                temp_html = "";
                //当中类被选择并初始化后,初始化小类
                class_3_init(class_2_key_array) ;

            };
            //初始化小类
            var class_3_init = function(class_2_key_array){
                //初始化小类键名组成的数组
                class_3_key_array = [] ;
                //判断由上级往下传的key_array长度是否为0
                if (class_2_key_array.length != 0) {
                    //若key_array长度为0,则说明无需渲染此节点及更深节点,直接往下传空array
                    //若key_array长度不为0,则继续渲染
                    //捕获选中的中类位置
                    class_2_selected_index = oClass_2.get(0).selectedIndex ;
                    $.each(classJson[class_0_key_array[class_0_selected_index]].children[class_1_key_array[class_1_selected_index]].children[class_2_key_array[class_2_selected_index]].children , function(key , value){
                        class_3_key_array.push(key) ;
                        temp_html += "<option value='"+value.trade_name+"'>"+value.trade_name+"</option>";                    
                    });
                }
                //渲染小类
                oClass_3.html(temp_html);
                //渲染完成后清空temp_html
                temp_html = "" ;
                //遍历完成,end

            }
            //改变门类的时候联动大类
            oClass_0.change(function(){
                class_1_init(class_0_key_array);
            });
            //改动大类的时候联动中类
            oClass_1.change(function(){
                class_2_init(class_1_key_array);
            });
            //改变中类的时候联动小类
            oClass_2.change(function(){
                class_3_init(class_2_key_array);
            })
            class_0_init();
        });

 

posted @ 2017-11-02 20:51  maoguy  阅读(4508)  评论(1编辑  收藏  举报