联动下拉菜单demo

效果图:

注意点:

json中的key必须有规律可寻;

面向对象的方式去完成。构造函数对每一个小功能的结合;

  //面向对象方式
        window.onload = function() {
            var s1 = new Sel("div1");
            //数据加载  key值有规律
            s1.add("0", ["1", "2", "3"]) //一级
            s1.add("0_0", ["1_1", "1_2", "1_3"]) //二级
            s1.add("0_0_0", ["1_1_1", "1_1_2", "1_1_3"]) //三级
            s1.add("0_0_1", ["1_2_1", "1_2_2", "1_2_3"]) //三级
            s1.add("0_0_2", ["1_3_1", "1_3_2", "1_3_3"]) //三级

            s1.add("0_1", ["2_1", "2_2", "2_3"]) //二级
            s1.add("0_1_0", ["2_1_1", "2_1_2", "2_1_3"]) //三级
            s1.add("0_1_1", ["2_2_1", "2_2_2", "2_2_3"]) //三级
            s1.add("0_1_2", ["2_3_1", "2_3_2", "2_3_3"]) //三级

            s1.add("0_2", ["3_1", "3_2", "3_3"]) //二级
            s1.add("0_2_0", ["3_1_1", "3_1_2", "3_1_3"]) //三级
            s1.add("0_2_1", ["3_2_1", "31_2_2", "3_2_3"]) //三级
            s1.add("0_2_2", ["3_3_1", "3_3_2", "3_3_3"]) //三级

            s1.init(3);
        }
        //创建构造函数
        function Sel(id) {
            this.oParent = document.getElementById(id);
            this.data = {};
            //全局属性 方法下获取所有select
            this.aSel = this.oParent.getElementsByTagName("select");

        }
        //用json key    value属性关联起来
        Sel.prototype = {
            //初始化
            init: function(num) {
                var This = this; //改变this指向  由osel对象 指向 下拉菜单;
                for (var i = 1; i <= num; i++) {
                    var oSel = document.createElement("select");
                    var oPt = document.createElement("option");
                    oPt.innerHTML = ‘默认‘;
                    oSel.index = i; //增加索引
                    oSel.appendChild(oPt);
                    this.oParent.appendChild(oSel);
                    //onchange事件改变的时候  第二个下拉菜单才改变
                    oSel.onchange = function() {
                        This.change(this.index);
                    }
                }
                //默认第一个下拉菜单
                this.first();
            },
            add: function(key, value) {
                this.data[key] = value;
            },
            //根据数组数据的多少来创建子项
            first: function() {
                var arr = this.data[0];
                for (var i = 0; i < arr.length; i++) {
                    var oPt = document.createElement("option");
                    oPt.innerHTML = arr[i]; //接下去添加第一个下拉菜单
                    this.aSel[0].appendChild(oPt);
                }
            },
            change: function(iNow) {
                //当传1 表示 第一个下拉菜单  传2 表示第二个下拉菜单
                var str = "0";
                //当传入1的时候要改变第二项内容的值。以此类推
                for (var i = 0; i < iNow; i++) {
                    //alert(this.aSel[i].selectedIndex)
                    str += "_" + (this.aSel[i].selectedIndex - 1);
                    console.log(this.data[str]);
                }
                if (!!this.data[str]) {
                    var arr = this.data[str];
                    this.aSel[iNow].length = 1; //只能一组存在 其他删除
                    for (var i = 0; i < arr.length; i++) {
                        var oPt = document.createElement("option");
                        oPt.innerHTML = arr[i]; //接下去添加第一个下拉菜单
                        this.aSel[iNow].appendChild(oPt);
                        //为什么是inow 不是 str str是 0_1 inow是数字
                    }
                    //默认下拉第一个框 使得第二个框跳过“默认”自动变为数据;
                    this.aSel[iNow].options[1].selected = true;
                    iNow++;
                    if (iNow < this.aSel.length) {
                        this.change(iNow);
                    }

                } else {
                    if (this.aSel[0].selectedIndex == 0) {
                        if (iNow < this.aSel.length) {
                            this.aSel[iNow].options.length = 1;
                            this.aSel[iNow + 1].options.length = 1;
                        }
                    } else {
                        if (iNow < this.aSel.length) {
                            this.aSel[iNow].options.length = 1;
                        }
                    }

                }
            }

        }
时间: 2024-08-01 22:32:38

联动下拉菜单demo的相关文章

jQuery cxSelect 多级联动下拉菜单

随着电商热门,这种多层次的互动更充分地体现在下拉菜单,最明显的是多级联动地址下拉选择,因此,这里是一个简单的分享 jQuery cxSelect 多级联动下拉菜单 cxSelect 它是基于 jQuery 多级联动菜单插件.它适用于各省.动菜单. 列表数据通过 AJAX 获取(须要在server环境执行),也能够使用变量自己定义,数据内容使用 JSON 格式. 提供国内省市县数据(数据来源:basecss/cityData Date: 2014.03.31) 个人一直都有习惯,当有新知识点须要学

(实用篇)jQuery+PHP+MySQL实现二级联动下拉菜单

二级联动下拉菜单选择应用在在很多地方,比如说省市下拉联动,商品大小类下拉选择联动.本文将通过实例讲解使用jQuery+PHP+MySQL来实现大小分类二级下拉联动效果. 先看下效果 大类:  前端技术   程序开发   数据库   小类: 实现的效果就是当选择大类时,小类下拉框里的选项内容也随着改变.实现原理:根据大类的值,通过jQuery把值传给后台PHP处理,PHP通过查询MySQl数据库,得到相应的小类,并返回JSON数据给前端处理. XHTML 首先我们要建立两个下拉选择框,第一个是大类

CSS3蓝色宽屏二级下拉菜单DEMO演示

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta name="viewport"

联动下拉菜单

<!doctype html><html><head><meta charset="utf-8"><title>联动下拉菜单</title><script>window.onload = function(){    var s1 = new Sel('div1');    s1.add('0',['1','2','3']);        s1.add('0_0',['1_1','1_2','1_3'

InfoPath与SharePoint之(三) 在InfoPath中实现联动下拉菜单

在InfoPath中实现联动的下拉菜单是一种比较常见的需求.这里通过演示如何选择省份和城市,讲解一下如何实现联动下拉菜单. 首先在上一篇博客里建的Area List,再加一个City的column,类型就是Single Line of Text. 在上一篇的博客中创建的下拉菜单旁边,再添加一个,用来显示城市.这个时候两个下拉菜单是没有关联的,而且显示的都是全部的item. 为了方便区分,去把两个Drop-Down List改了名词,分别是Province 和City. 首先我们要去除掉省份的重复

省市联动下拉菜单的实现

  省市联动下拉菜单的实现一.数据库的建立为了更好的实现与数据库连接,省表中需要有两个元素,一个是省编号,一个是省名称:市表中需要有三个元素,一个是市编号,一个是市名称,更重要的是这个市改隶属于那个省.省表(UserProvince)ProID    ProName1            河南2            安徽市表(UserCity)CityID    ProID    CityName1              1         郑州2              2     

省市区县街道四级联动下拉菜单

参考代码: JQuery中国省市区街道三级.四级联动下拉菜单插件 (将代码中单纯的四级联动提取出来,对其中的bug进行了修正,并完善了一些不完美的地方) 先通过最终效果看一下功能: 代码如下: index.html:(注:请将代码中的jquery.min.js替换成你本地的jquery地址) <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>jQuery四级

ajax三级联动下拉菜单

ajax写三级联动,先写一个文件类吧,以后用的时候直接调用即可: 来找一张表: 实现: 中国地域的三级联动:省.市.区: 图: 说一下思路: (1)当用户选择省份的时候触发事件,把当前的省份的id通过ajax发出请求传递到服务端的程序中 (2)比如取中国地域,中国是0001,那么自带号为0001的便是中国地域: 北京的代号为11,那么子代号为11的便是北京时的市区, 也就是说根据主代号查询子代号: (3)服务端根据客户端的请求,查询数据库,并按照一定的格式返回给客户端 显示页面非常简单,只需要一

n级联动下拉菜单组件

这是最近在写的一套前端库中的一个组件,支持n级联动的下拉菜单,在这里跟大家分享一下. 使用方法如下: <div id="test"> <p>省份:<select></select></p> <p>城市:<select></select></p> <p>商家:<select></select></p> </div> <