`
lgd_java2eye
  • 浏览: 189608 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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]);
            }
        }
    }
}

 

0
1
分享到:
评论

相关推荐

    JS+ASP二级联动菜单

    ### JS+ASP 二级联动菜单实现原理与代码解析 #### 一、背景介绍 在Web开发中,为了提高用户体验和页面交互性,开发者经常会使用到动态加载数据的技术。其中,“二级联动菜单”就是一个典型的应用场景,它常用于展示...

    AJAX-N级联动

    综上所述,AJAX-N级联动是通过监听用户操作,使用AJAX技术动态获取和更新页面内容,实现各级菜单间的相互影响。理解和掌握这一技术,对于提升Web应用的交互性和效率具有重要意义。通过不断实践和优化,我们可以创建...

    基于jquery的N级下拉联动

    5. 扩展性:为了实现N级联动,可以在事件处理函数中加入递归逻辑。当处理完当前级别的联动后,检查是否还有下一级,若有则继续处理,直至无更多级为止。 四、示例代码 以下是一个简单的3级下拉联动的jQuery实现: ...

    Jquery N级联动

    linkedSelect.js是一款基于Jquery的小型插件,它实现了多级联动效果,适用于快速构建N级联动的下拉菜单。以下是该插件的核心思路: 1. **初始化设置**:在页面加载时,我们需要对每个需要联动的select元素进行初始...

    ajax n级联动数据库版(带后台和省市县数据库)

    **Ajax N级联动数据库版**是一种前端与后端交互的技术实现,主要应用于多级选择下拉菜单,如省、市、县的选择。这种技术利用Ajax(异步JavaScript和XML)来实现在不刷新整个页面的情况下,动态更新部分网页内容。在...

    年、月、日三级联动下拉菜单

    ### 年、月、日三级联动下拉菜单的实现原理及代码解析 #### 一、概述 在网页应用中,为了提高用户体验并简化用户输入,经常需要实现年、月、日三级联动的选择功能。这种功能通常用于表单中的日期选择器,通过下拉...

    JS实现的五级联动菜单效果完整实例

    本文实例讲述了JS实现的五级联动菜单效果。分享给大家供大家参考,具体如下: js实现多级联动的方法很多,这里给出一种5级联动的例子,其实可以扩展成N级联动,在做项目的时候碰到了这样一个问题但是有不能从数据库中...

    JavaScript实现三级联动菜单效果

    这个示例代码展示了如何使用JavaScript实现一个三级联动菜单的效果。在网页设计中,联动菜单常用于地区选择、产品分类等场景,用户的选择会直接影响下一级菜单的内容。在这个例子中,我们有三个级别的选择:省份、...

    【JavaScript源代码】React实现二级联动(左右联动).docx

    在React开发中,二级联动是一种常见的交互效果,通常用于下拉菜单、地区选择等场景,让用户能够通过选择一级选项来筛选或展示二级选项。本文将详细介绍如何使用JavaScript和React实现二级联动,特别是左右联动的效果...

    全球国家,省份,城市 三级联动

    在IT领域,"三级联动"是一种常见的用户界面交互设计,主要应用于下拉选择框或级联菜单中。这种设计通常涉及到三个层次的数据关联,如在本例中的“全球国家,省份,城市”,用户在选择一个国家后,省份的选项会根据所...

    很super的省级联动菜单全球的

    8. **国际化(i18n)支持**:作为"全球的"省级联动菜单,很可能需要支持多语言。这就需要在代码中实现国际化功能,使得菜单能够根据用户的选择显示相应的语言。 综上所述,"很super的省级联动菜单全球的"可能是一个...

    jquery省市三级联动.rar

    本示例中的"jquery省市三级联动.rar"是一个使用jQuery实现的省市三级联动效果的示例代码。这个功能常用于网页上的地址选择,用户在选择省份后,下拉菜单会自动更新为对应省份的城市,接着选择城市后,再次更新为该...

    世界地区三级联动demo(带完整国家地区信息)

    在UI设计上,这个demo需要创建清晰易用的交互界面,包括三级联动的下拉菜单,以及可能的搜索功能。良好的用户体验设计是提高用户满意度的关键。 最后,对于国际化的支持,这个项目可能使用i18n(国际化)框架,如...

    发布一个支持N级下拉列表联动的控件

    在给定的资源中,我们看到一个名为`linkedSelect.js`的文件,这很可能是一个JavaScript实现的N级联动下拉列表控件。JavaScript是网页动态交互的核心,用于处理用户输入、更新DOM(文档对象模型)以及与其他脚本或...

    PHP+mysql实现的三级联动菜单功能示例

    PHP+MySQL实现三级联动菜单功能涉及到数据库设计、PHP编程、前端页面设计以及JavaScript的交互逻辑等多个方面。下面将详细介绍这些知识点。 **知识点一:数据库设计** 在三级联动菜单中,数据库是核心。首先需要...

    ASP源码—ajax n级联动数据库版(带后台和省市县数据库) utf-8.zip

    此资源“ASP源码—ajax n级联动数据库版(带后台和省市县数据库) utf-8.zip”显然是一个使用ASP技术构建的Web应用程序,它利用了AJAX(Asynchronous JavaScript and XML)技术来实现多级联动下拉菜单。这种联动效果...

    javascript实现日期三级联动下拉框选择菜单

    在本文中,我们将深入探讨如何使用JavaScript实现日期三级联动下拉框选择菜单,特别关注年、月、日的三级联动功能。这种功能在许多网页表单中非常常见,特别是在用户需要输入生日或特定日期时。下面,我们将逐步解析...

    N级级联Google式下拉选单

    标题中的“N级级联Google式下拉选单”指的是一个基于jQuery的插件,它模仿了Google搜索框中的级联下拉菜单效果,并且能够扩展到任意多级(N级),提供用户更加灵活和丰富的选择体验。这种设计通常用于在输入框中辅助...

Global site tag (gtag.js) - Google Analytics