当前位置: 代码迷 >> Web前端 >> N级联动菜单兑现
  详细解决方案

N级联动菜单兑现

热度:115   发布时间:2012-10-29 10:03:53.0
N级联动菜单实现

关于联动N级联动菜单实现原理:

1:? 链表原理

2:js对象的封装

具体实现代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>N级联动菜单</title>
    </head>
    <body>
        <select name="province" id="province" onchange="sb.nextadd(this)">
        </select>
        <select name="city" id="city" onchange="sb.nextadd(this)">
        </select>
        <select name="county" id="county">
        </select>
        <script language="JavaScript" src="SelectBuilder.js">
        </script>
        <script type="text/javascript">
            var citys = [{
                code: "A001",
                lable: "河南省",
                fcode: ""
            }, {
                code: "B001",
                lable: "郑州市",
                fcode: "A001"
            }, {
                code: "B002",
                lable: "濮阳市",
                fcode: "A001"
            }, {
                code: "C001",
                lable: "巩义县",
                fcode: "B001"
            }, {
                code: "C002",
                lable: "南乐县",
                fcode: "B002"
            }, {
                code: "C003",
                lable: "濮阳县",
                fcode: "B002"
            }, {
                code: "G001",
                lable: "河北省",
                fcode: ""
            }];
            var level = [{
                id: "province",
                value: "A001"
            }, {
                id: "city",
                value: "B001"
            }, {
                id: "county",
                value: "C001"
            }];
           
            var sb= new SelectBuilder(citys, level);
            sb.init();
        </script>
    </body>
</html>
SelectBuilder.js代码:

//lgd 2010-06-02,N级联动的实现
//lgd 2010-06-02,N级联动的实现
var defaultOptions = {
    code: "",
    lable: "请选择"
};
var HtmlDomUtil = {
    createOption: function(value, label){
        var _opt = document.createElement("option");
        _opt.text = label;
        _opt.value = value;
        return _opt;
    },
    getSelectById: function(id){
        return document.getElementById(id);
    }
};
var SelectBuilder=function(citys, level){
  this.citys = citys;
     this.level = level;
}
SelectBuilder.prototype = {
    init: function(){
        var firstLevel = this.level[0];
        var _select = HtmlDomUtil.getSelectById(firstLevel.id);
        for (var i = 0; i < this.citys.length; i++) {
            if (this.citys[i].fcode == "") {
                var opt = HtmlDomUtil.createOption(this.citys[i].code, this.citys[i].lable);
    //ie ff通用的方法
     _select.options.add(opt);
            }
        }
        this.nextadd(_select);
    },
    nextadd: function(currentyObj){
        var _curValue = currentyObj.value;
        //根据当前的选择的下拉列表框的ID来获取下一个下拉列表框的ID
        var _nextId = this.getNextSelectId(currentyObj.id);
        if (_nextId != "") {
            this.clear(_nextId);
        }
        var index = this.getNextSelectIndex(currentyObj.id);
        for (var i = index + 1; i < this.level.length; i++) {
            var _nextObj = HtmlDomUtil.getSelectById(this.level[i].id);
            var _upObj = HtmlDomUtil.getSelectById(this.level[i - 1].id);
            //defaultOptions
            var opt = HtmlDomUtil.createOption(defaultOptions.code, defaultOptions.lable);
   try{
    //if  ie  执行
     _nextObj.add(opt);
   }catch(e){
    //firefox执行
    _nextObj.options.add(opt);
   }
            for (var k = 0; k < this.citys.length; k++) {
                if ((this.citys[k].fcode == _upObj.value) && (this.citys[k].fcode) != "") {
                    var _opt = HtmlDomUtil.createOption(this.citys[k].code, this.citys[k].lable);
     try{
      _nextObj.add(_opt);
     }catch(e){
      _nextObj.options.add(_opt);
     }
                    if (_opt.value == this.level[i].value) {
                        _opt.selected = true;
                    }
                }
            }
        }
    },
    getNextSelectId: function(id){
        for (var i = 0; i < this.level.length; i++) {
            if (this.level[i].id == id) {
                if (!((i + 1) >= this.level.length)) {
                    return this.level[i + 1].id;
                }
            }
        }
        return "";
    },
    getNextSelectIndex: function(id){
        for (var i = 0; i < this.level.length; i++) {
            if (this.level[i].id == id) {
                return i;
            }
        }
        return -1;
    },
    clear: function(clearId){
        var _nextIndex = this.getNextSelectIndex(clearId);
        for (var i = _nextIndex; i < this.level.length; i++) {
            var _tmpId = this.level[i].id;
            var _clearObj = HtmlDomUtil.getSelectById(_tmpId);
            var _opts = _clearObj.options;
            for (var k = _opts.length - 1; k > -1; k--) {
                _clearObj.removeChild(_opts[k]);
            }
        }
    }
}

?

  相关解决方案