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

JavaScript实现联动

    博客分类:
  • Java
阅读更多
所谓联动菜单,就是后一个下拉框的选项是根据前一个下拉框被选中的值来决定的,一个典型的应用就是省市联动菜单了,市的下拉选项是根据你选了哪个省来决定的,类似的需求我们经常遇到,相信许多新手都被这个问题困扰过。

其实,联动菜单的实现原理非常简单,本文详细介绍了联动菜单的实现方式,知道了原理,我们可以很容易地制作从XML、数据库加载的无限级联动菜单。

联动菜单的实现方法:

1.确定数据格式:

首先,我们介绍一下创建 Option 的语法:

Code:

var newOption = new Option(optionText, optionvalue);

根据上面的语法,我们知道 select 选项分 optionText 和 optionvalue 两个内容,optionText 即下拉框中我们看到的选项,而 optionvalue 则是提交的实际值。比如一个选项我们看到的是 “北京”,而实际提交的值是 “010”。

为了保持一致,我们确定选项的格式为:

Code:

{txt:"选项名", val:"选项值"}

那么一个选项组则是:

Code:
var childArr = [];
childArr['父选项值1'] = [
    {txt:"选项名1", val:"选项值1"},
    {txt:"选项名2", val:"选项值2"},
    {txt:"选项名3", val:"选项值3"},
    ...
    {txt:"选项名n", val:"选项值n"}
]
childArr[' 父选项值2'] = [
    {txt:"选项名1", val:"选项值1"},
    {txt:"选项名2", val:"选项值2"},
    {txt:"选项名3", val:"选项值3"},
    ...
    {txt:"选项名n", val:"选项值n"}
]


其中“父选项值”是父下拉列表选中的值。

注意:[ ] 和 {} 中的值是以“,” (逗号)分隔的,但是最后一个值后面不能有 “,” (逗号),否则语法错误, PHP 程序员要特别注意 !!!

2.根据传入的数组创建选项列表:

Code:
for (var i=0; i < len; i++)
{
    selectObj.options[i] = new Option(optionList[i].txt, optionList[i].val);
}


3.在设置选项之前,我们需要先将原有选项清空:

Code:
function removeOptions(selectObj)
{
    if (typeof selectObj != 'object')
    {
        selectObj = document.getElementById(selectObj);
    }
    // 原有选项计数
    var len = selectObj.options.length;
    for (var i=0; i < len; i++)
    {
        // 移除当前选项
        selectObj.options[0] = null;
    }
}


注意,这里不是用 selectObj.options[i] 而是用的 selectObj.options[0] ,由于在 options[0] 删除后,后面的选项就会补上,因此,我们只需要 selectObj.options[0] = null 。

4.设置一个提示选择项和默认选择项:

通常我们在下拉列表中会设置一个提示选择项,如:“请选择城市”,这个选项值为空,作用只是提示用户执行选择操作。

另外,下拉列表也需要能够设置默认选择项,即在页面加载的时候,设置选中状态的项目。

完整代码如下:

javascript:
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Untitled Document</title>
        <script language="JavaScript" type="text/javascript">
            function removeOptions(selectObj){
                if (typeof selectObj != 'object') {
                    selectObj = document.getElementById(selectObj);
                } // 原有选项计数     
                var len = selectObj.options.length;
                for (var i = 0; i < len; i++) {
                    // 移除当前选项         
                    selectObj.options[0] = null;
                }
            }
            /** 说明:设置传入的选项值到指定的下拉列表中  
			  * 作者:Admin 
			  * @param {String || Object]} selectObj 目标下拉选框的名称或对象,必须  
			  * @param {Array} optionList 选项值设置 格式:[{txt:'北京 ', val:'010'}, 
			  * {txt:' 上海', val:'020'}] ,必须 
			  * @param {String} firstOption 第一个选项值,如:“请选择”,可选,值为空 
			  * @param {String} selected 默认选中值,可选  
			**/  
            function setSelectOption(selectObj, optionList, firstOption, selected){
                if (typeof selectObj != 'object') {
                    selectObj = document.getElementById(selectObj);
                } // 清空选项      
                removeOptions(selectObj); // 选项计数      
                var start = 0; // 如果需要添加第一个选项      
                if (firstOption) {
                    selectObj.options[0] = new Option(firstOption, ''); // 选项计数从 1 开始          
                    start++;
                }
                var len = optionList.length;
                for (var i = 0; i < len; i++) {
                    // 设置 option          
                    selectObj.options[start] = new Option(optionList[i].txt, optionList[i].val);
                    // 选中项          
                    if (selected == optionList[i].val) {
                        selectObj.options[start].selected = true;
                    }
                    // 计数加 1          
                    start++;
                }
            } //-->  
        </script>
        <script language="JavaScript" type="text/javascript">
            var cityArr = [];
            cityArr['江苏省'] = [{txt: '南京',val: '南京'}, 
								{txt: '无锡',val: '无锡'}, 
								{txt: '徐州',val: '徐州'}, 
								{txt: '苏州',val: '苏州'}, 
								{txt: '南通',val: '南通'}, 
								{txt: '淮阴',val: '淮阴'}, 
								{txt: '扬州',val: '扬州'}, 
								{txt: '镇江',val: '镇江'}, 
								{txt: '常州',val: '常州'}];
            
			cityArr['浙江省'] = [{txt: '杭州',val: '杭州'}, 
								{txt: '宁波',val: '宁波'}, 
								{txt: '温州',val: '温州'}, 
								{txt: '湖州',val: '湖州'}];
            function setCity(province){
                setSelectOption('city', cityArr[province], '-请选择-');
            }
        </script>
        <select name="province" id="province" onchange="if(this.value != '')  setCity(this.options[this.selectedIndex].value);">
            <option value="">-请选择-</option>
            <option value="江苏省">江苏省</option>
            <option value="浙江省">浙江省</option>
        </select>
		                        省 
        <select name="city" id="city">
            <option value="">-请选择-</option>
        </select>
                                              市 
        </script>
    </head>
    <body>
    </body>
</html>


根据这个结构,设置好数据,我们可以很容易的实现无限级联动菜单。或者我们也可以将数据存放在文件或数据库中,通过 Ajax 获取数据。
分享到:
评论

相关推荐

    JavaScript实现联动菜单特效

    总结起来,JavaScript实现联动菜单特效的关键在于利用`&lt;select&gt;`元素的`onchange`事件,以及动态修改DOM内容。在实际开发中,这样的功能可以扩展到更多层级的菜单,例如省份、城市、区县等。同时,也可以结合AJAX...

    javascript实现省市区三级联动

    在JavaScript编程中,实现省市区三级联动是一种常见的需求,尤其在构建动态网页和Web应用程序时。这个功能允许用户在选择省份后,市和区的选择会根据省份自动更新,提供更流畅的用户体验。以下是对这个主题的详细...

    javascript实现省市联动

    javascript实现省市联动,提高javascript编程水平

    javascript实现省市县联动

    总结来说,javascript实现省市县联动主要依赖于JavaScript的事件监听、DOM操作以及数据驱动。通过理解这些基本概念,开发者可以轻松实现类似的功能,提供更友好的用户界面。在实际开发中,还可以结合其他前端框架,...

    javascript简易实现联动

    在本教程中,我们将深入探讨如何利用JavaScript实现这种联动效果。 首先,理解联动的基本概念:联动意味着两个或多个组件之间存在依赖关系,当一个组件的状态改变时,其他相关组件会自动更新以反映这种变化。在...

    javascript实现下拉框二级联动

    在网页开发中,二级联动...总结来说,JavaScript实现二级联动下拉框的关键在于监听父级下拉框的改变事件,根据用户选择的数据动态更新子级下拉框的选项。通过合理的数据结构和异步处理,可以实现灵活且高效的联动效果。

    javascript实现省市区联动

    下面我们将深入探讨如何使用JavaScript实现省市区联动。 首先,我们需要一个数据结构来存储省市区的层级关系。这个数据结构可以是一个嵌套的对象数组,每个对象代表一个地区,包含其ID、名称以及子地区的数组。例如...

    javascript无限级联动算法

    JavaScript无限级联动算法是一种在前端开发中常见...记住,理解并掌握这种无限级联动的实现原理,对于提升你的JavaScript开发能力非常有帮助。同时,不断接受他人批评和建议,持续改进,是编程道路上不可或缺的一部分。

    javascript 省市联动菜单

    总之,JavaScript实现省市区联动菜单涉及到HTML布局、JavaScript事件处理、DOM操作以及数据结构的设计。通过合理地组织代码和利用浏览器的特性,我们可以创建出一个既实用又高效的联动菜单,满足用户的地理选择需求...

    仿淘宝商品发布三级联动菜单

    JavaScript实现联动的核心在于监听用户在一级菜单的选择,动态更新二级和三级菜单的内容。 4. **AJAX**:异步JavaScript和XML,虽然名字中有XML,但在实际应用中更多的是JSON格式。在三级联动中,AJAX可以用于后台...

    ssh+dwr2实现省市二级联动

    前端部分,使用HTML和JavaScript实现联动效果。在HTML页面上创建两个下拉菜单,分别用于选择省份和城市。在DWR初始化时,可以通过`getProvinces()`方法获取所有省份填充到第一个下拉菜单。当用户选择省份时,触发...

    jsp从数据库获取数据填充下拉框实现二级联动菜单的方法.docx

    在JSP页面中,使用Struts2标签库来显示数据,并通过JavaScript实现联动效果。 ##### 5.1 显示一级数据 ```jsp 请选择--"&gt; ``` ##### 5.2 实现联动 ```javascript &lt;script type="text/javascript"&gt; function...

    javascript实现二级联动下拉框.docx

    JavaScript 实现二级联动下拉框 本文将详细介绍如何使用 JavaScript 实现二级联动下拉框,包括标题、描述、标签、部分内容等信息。 标题:JavaScript 实现二级联动下拉框 描述:JavaScript 实现二级联动下拉框是...

    省市地区联动的Javascript实现

    "省市地区联动的Javascript实现"就是针对这一需求的解决方案。 在JavaScript中实现省市地区联动,主要涉及到以下几个关键知识点: 1. **DOM操作**:JavaScript提供了对HTML文档对象模型(DOM)的操作能力,通过...

    javascript实现二级的省份城市联动

    javascript实现二级的省份城市联动。 var aprovince = [ ["--请选择省份--"], ["北京"], ["上海"], ["广东"], ["湖南"] ]; var acity = [ ["--请选择城市--"], ["东城区","西城区","南城区","北城区"], [...

    javascript 实现二级联动

    根据提供的信息,我们可以了解到这份材料主要讲解了如何使用JavaScript实现二级联动效果。下面将详细解释这一知识点,并结合给出的部分代码进行分析。 ### JavaScript 实现二级联动 #### 一、二级联动概念 二级...

    javascript实现三级联动选单

    本文将基于提供的代码片段详细介绍如何利用JavaScript实现三级联动选单。 #### 二、关键概念与原理 1. **DOM操作**:在JavaScript中,通过DOM (Document Object Model) 操作文档结构,实现动态更新页面元素的功能...

    javascript实现二级联动下拉框

    本文将详细介绍如何使用JavaScript实现二级联动下拉框。 #### 示例背景 此示例主要针对具有二级联动功能的需求场景,其中第一级(如省份)是固定的选项,而第二级(如城市)的内容会根据第一级的选择动态变化。...

Global site tag (gtag.js) - Google Analytics