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

【转载】Javascript 实现无刷新联动菜单(select)的方法

    博客分类:
  • WEB
阅读更多
作者: CodeBit     来源: CodeBit.cn     时间: 2007-04-26 08:12:30
摘要: 所谓联动菜单,就是后一个下拉框的选项是根据前一个下拉框被选中的值来决定的,一个典型的应用就是省市联动菜单了,市的下拉选项是根据你选了哪个省来决定的,类似的需求我们经常遇到,相信许多新手都被这个问题困扰过。

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

关键词: 下拉框, 选项, 级联, select, 菜单, 联动, 无刷新, Javascript,  

 

----------------------------------------------------------------------------------------------------------------------------------

联动菜单的实现方法:

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.设置一个提示选择项和默认选择项:


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

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

完整代码如下:


 

<script language="JavaScript" type="text/javascript">
<!--  
	/*  
	* 说明:将指定下拉列表的选项值清空  
	* 作者:CodeBit.cn ( http://www.CodeBit.cn )  
	*  
	* @param {String || Object]} selectObj 目标下拉选框的名称或对象,必须  
	*/ 
	
	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;     
		} 
	}  
	
	/*
	* 说明:设置传入的选项值到指定的下拉列表中  
	* 作者:CodeBit.cn ( http://www.CodeBit.cn )  
	*  
	* @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> 市 

 

  

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

 

原始连接http://www.codebit.cn/pub/html/javascript/tip/combo_select/

分享到:
评论

相关推荐

    .NET中实现客户端联动菜单 (无刷新)

    Ajax实现无刷新三联动下拉框 1.html代码 &lt;title&gt;Ajax实现无刷新三联动下拉框 &lt;meta content="JavaScript" name="vs_defaultClientScript"&gt; &lt;SCRIPT language="javascript"&gt; //城市-----------------...

    程序天下:JavaScript实例自学手册

    11.16 三级联动菜单 11.17 三级联动菜单 11.18 树型目录菜单 第12章 窗口特效与弹出式警告 12.1 无关闭按钮的窗口 12.2 鼠标控制窗口开关 12.3 使窗口只第一次访问时弹出 12.4 禁止弹出警告框 12.5 关闭窗口不提示的...

    《程序天下:JavaScript实例自学手册》光盘源码

    11.16 三级联动菜单 11.17 三级联动菜单 11.18 树型目录菜单 第12章 窗口特效与弹出式警告 12.1 无关闭按钮的窗口 12.2 鼠标控制窗口开关 12.3 使窗口只第一次访问时弹出 12.4 禁止弹出警告框 12.5 关闭窗口不提示的...

    javascript 无限联动菜单效果代码

    Selects *{font-size:14px;} select{height:20px;font-size:12px;} 2级联动 3级联动 4级联动 5级联动 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

    asp.net知识库

    XmlHttp实现无刷新三联动ListBox 鼠标放在一个连接上,会显示图片(类似tooltip) 使用microsoft.web.ui.webcontrols的TabStrip与IFame组件,达到页的切换效果 HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,...

    jsp编程技巧集锦

    两级下拉列表框联动菜单? 5. java中如何把一个目录下的文件移到另一个指定的目录? 6. 制作表格线? 7. jsp如判别一个字符在A到Z之间? 8. 得到一浮点数小数点后4位,如何写以函数截取为两位 9. 整型...

    JSP实用技巧集合,jsp编程的一些小技巧总结

    4. 两级下拉列表框联动菜单? 5. java中如何把一个目录下的文件移到另一个指定的目录? 6. 制作表格线? 7. jsp如判别一个字符在A到Z之间? 8. 得到一浮点数小数点后4位,如何写以函数截取为两位 9. 整型转字符? 10. ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例163 省市县级联动菜单 194 实例164 应用下拉列表选择所要联机的网站 196 实例165 可输入字符的下拉菜单 197 实例166 设置下拉列表的默认值 198 实例167 设置下拉列表的样式 199 实例168 下拉列表打开窗口 200 ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例163 省市县级联动菜单 194 实例164 应用下拉列表选择所要联机的网站 196 实例165 可输入字符的下拉菜单 197 实例166 设置下拉列表的默认值 198 实例167 设置下拉列表的样式 199 实例168 下拉列表打开窗口 200 ...

    ExtAspNet_v2.3.2_dll

    -增加示例(data/tree_select_run.aspx),如何选中当前节点的所有子节点(feedback:wjl_wjl520)。 +TreeNode的属性NodeId被重命名为NodeID,这是ExtAspNet中的一个命名约定。 -同时更名的还有GridColumn的...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -增加示例(data/tree_select_run.aspx),如何选中当前节点的所有子节点(feedback:wjl_wjl520)。 +TreeNode的属性NodeId被重命名为NodeID,这是ExtAspNet中的一个命名约定。 -同时更名的还有GridColumn的...

Global site tag (gtag.js) - Google Analytics