解析JS实现无刷新联动菜单技巧

开发 前端
这里向大家描述一下JS实现无刷新联动菜单(select)的方法,所谓联动菜单,就是后一个下拉框的选项是根据前一个下拉框被选中的值来决定的。

本文向大家简单介绍一下什么是联动菜单,以及JS实现无刷新联动菜单(select)的方法,其实,联动菜单的实现原理非常简单,本文详细介绍了联动菜单的实现方式,知道了原理,我们可以很容易地制作从XML、数据库加载的无限级联动菜单。

JS实现无刷新联动菜单(select)的方法

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

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

联动菜单的实现方法:

1.确定数据格式:

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

  Code:

  1.   varnewOption=newOption(optionText,optionvalue);  
  2.  

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

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

  Code:

  1.   {txt:"选项名",val:"选项值"}  
  2.  

  那么一个选项组则是:

  Code:

  1. varchildArr=[];  
  2. childArr['父选项值1']=[  
  3.   {txt:"选项名1",val:"选项值1"},  
  4.   {txt:"选项名2",val:"选项值2"},  
  5.   {txt:"选项名3",val:"选项值3"},  
  6.   ...  
  7.   {txt:"选项名n",val:"选项值n"}  
  8. ]  
  9. childArr['父选项值2']=[  
  10.   {txt:"选项名1",val:"选项值1"},  
  11.   {txt:"选项名2",val:"选项值2"},  
  12.   {txt:"选项名3",val:"选项值3"},  
  13.   ...  
  14.   {txt:"选项名n",val:"选项值n"}  
  15. ]  
  16.  

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

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

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

  Code:

  1. for(vari=0;i<len;i++)  
  2. {  
  3.   selectObj.options[i]=newOption(optionList[i].txt,optionList[i].val);  
  4. }  
  5.  

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

  Code:

  1. functionremoveOptions(selectObj)  
  2. {  
  3.   if(typeofselectObj!='object')  
  4.   {  
  5.     selectObj=document.getElementById(selectObj);  
  6.   }  
  7.   //原有选项计数  
  8.   varlen=selectObj.options.length;  
  9.   for(vari=0;i<len;i++)  
  10.   {  
  11.     //移除当前选项  
  12.     selectObj.options[0]=null;  
  13.   }  
  14. }  
  15.  

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

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

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

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

  完整代码如下:

  Javascript:

  1. <scriptlanguagescriptlanguage="JavaScript"
  2. type="text/javascript"> 
  3. <!--   
  4. /**说明:将指定下拉列表的选项值清空   
  5. *作者:CodeBit.cn(http://www.CodeBit.cn) *   
  6. *@param{String||Object]}selectObj目标下拉选框的名称或对象,必须   
  7. */  
  8. functionremoveOptions(selectObj){    
  9. if(typeofselectObj!='object'){      
  10. selectObj=document.getElementById(selectObj);} //原有选项计数    
  11. varlen=selectObj.options.length;     
  12. for(vari=0;i<len;i++)  {      
  13. //移除当前选项      
  14. selectObj.options[0]=null;    
  15. }}  
  16. /**说明:设置传入的选项值到指定的下拉列表中   
  17. *作者:CodeBit.cn(http://www.CodeBit.cn) *   
  18. *@param{String||Object]}selectObj目标下拉选框的名称或对象,必须   
  19. *@param{Array}optionList选项值设置格式:[{txt:'北京',val:'010'},  
  20. *{txt:'上海',val:'020'}],必须  
  21. *@param{String}firstOption***个选项值,如:“请选择”,可选,值为空  
  22. *@param{String}selected默认选中值,可选   
  23. */  
  24. functionsetSelectOption(selectObj,optionList,
  25. firstOption,selected){    
  26. if(typeofselectObj!='object'){      
  27. selectObj=document.getElementById(selectObj);    
  28. }   //清空选项    
  29. removeOptions(selectObj);   //选项计数    
  30. varstart=0;     //如果需要添加***个选项    
  31. if(firstOption){      
  32. selectObj.options[0]=newOption(firstOption,'');
  33.   //选项计数从1开始      
  34. start++;    
  35. }     
  36. varlen=optionList.length;     
  37. for(vari=0;i<len;i++){      
  38. //设置option      
  39. selectObj.options[start]=newOption(optionList[i].txt,
  40. optionList[i].val);       
  41. //选中项      
  42. if(selected==optionList[i].val){        
  43. selectObj.options[start].selected=true;      
  44. }       
  45. //计数加1      
  46. start++;  
  47. }} //--> 
  48. </script> 
  49.  

 #p#示例代码:

  HTML:

  1. <scriptlanguagescriptlanguage="JavaScript"
  2. type="text/javascript">   
  3. varcityArr=[];  
  4. cityArr['江苏省']=[  
  5. {txt:'南京',val:'南京'},  
  6. {txt:'无锡',val:'无锡'},      
  7. {txt:'徐州',val:'徐州'},      
  8. {txt:'苏州',val:'苏州'},      
  9. {txt:'南通',val:'南通'},      
  10. {txt:'淮阴',val:'淮阴'},      
  11. {txt:'扬州',val:'扬州'},      
  12. {txt:'镇江',val:'镇江'},      
  13. {txt:'常州',val:'常州'}    
  14. ];  
  15. cityArr['浙江省']=[      
  16. {txt:'杭州',val:'杭州'},       
  17. {txt:'宁波',val:'宁波'},      
  18. {txt:'温州',val:'温州'},      
  19. {txt:'湖州',val:'湖州'}    
  20. ];   
  21. functionsetCity(province){      
  22. setSelectOption('city',cityArr[province],'-请选择-');  
  23. }   
  24. </script>   
  25. <selectnameselectname="province"id="province"
  26. onchange="if(this.value!='')  
  27. setCity(this.options[this.selectedIndex].value);">    
  28. <optionvalueoptionvalue="">-请选择-</option>    
  29. <optionvalueoptionvalue="江苏省">江苏省</option>    
  30. <optionvalueoptionvalue="浙江省">浙江省</option> 
  31. </select> 
  32. 省   
  33. <selectnameselectname="city"id="city">    
  34. <optionvalueoptionvalue="">-请选择-</option> 
  35. </select> 
  36. 市  
  37.  

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

【编辑推荐】

  1. JavaScript对象的定义及创建实例
  2. 常用JavaScript内部对象
  3. JavaScript中图像处理技巧
  4. JavaScript函数中arguments对象
  5. Javascript中CSS属性float特殊写法

 

责任编辑:佚名 来源: tech.ddvip.com
相关推荐

2017-07-28 17:12:52

绿盟科技

2012-04-12 10:19:08

Ajax.NET

2017-03-29 13:27:20

互联网

2011-12-09 12:37:06

2021-03-12 16:25:17

技巧vue页面刷新

2010-01-08 18:31:45

VB.NET历史菜单

2009-12-09 16:42:55

PHP二级联动菜单

2009-06-26 15:17:27

jQuery

2013-12-02 15:25:38

jQuery插件

2009-11-24 16:09:44

PHP Ajax

2024-07-11 10:38:02

2010-01-27 10:21:00

Android菜单

2011-06-09 15:44:29

Spring

2015-03-26 13:14:53

javascriptjs callback实现调用

2009-12-30 17:19:09

Silverlight

2019-12-10 09:44:58

云计算阿里云谷歌

2012-04-13 10:05:24

ASP.NET

2012-05-02 14:41:04

jQuery

2022-09-28 12:39:46

axios拦截器

2022-11-16 13:23:51

点赞
收藏

51CTO技术栈公众号