网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计资源 > .Net编程 > 正文

使用javascript和XML制作连动下拉框

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

传统的HTML页面中连动下拉框采用了两种方法:

1)直接将下拉框中的内容hardcode于html的javascript中,调用javascript函数循环写入下拉框中。这种方法不适用于下拉框内容经常改变的情况。因为数据源和javascript程序写死在同一页面。

2)javascript 直接读取数据库,取数据库中的记录写入javascript中,然后和第一种方法一样,调用javascript函数循环写入下拉框中。此方法将数据源与javascript分开,但,公开数据库的连接,从安全角度说,没有多少实用价值。

我的方法是将下拉框中的数据放在XML文件中,用javascript读XML文件,取得下拉框中的内容。

HTML 文件如下:
<!-- myfile.html -->

  1. <html> 
  2.  
  3. <head> 
  4.  
  5. <script language="JavaScript" for="window" event="onload"> 
  6.  
  7. var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
  8.  
  9. var i=0
  10.  
  11. var j=0
  12.  
  13. var subclass_name=""
  14.  
  15. loadXML(); 
  16.  
  17. function loadXML(){ 
  18.  
  19. xmlDoc.async="false"
  20.  
  21. xmlDoc.load("account.xml"); 
  22.  
  23. xmlObj=xmlDoc.documentElement;  
  24.  
  25. nodes = xmlDoc.documentElement.childNodes; 
  26.  
  27. document.frm.mainclass.options.length = 0;  
  28.  
  29. document.frm.subclass.options.length = 0;  
  30.  
  31.  
  32.  
  33.  
  34.  
  35. for (i=0;i<xmlObj.childNodes.length;i++){ 
  36.  
  37. labels=xmlObj.childNodes(i).getAttribute("display_name"); 
  38.  
  39. values=xmlObj.childNodes(i).text; 
  40.  
  41. document.frm.mainclass.add(document.createElement("OPTION")); 
  42.  
  43. document.frm.mainclass.options[i].text=labels;  
  44.  
  45. document.frm.mainclass.options[i].value=values;  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57. </script> 
  58.  
  59.  
  60.  
  61. <script language="JavaScript" > 
  62.  
  63. var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
  64.  
  65. var i=0
  66.  
  67. var j=0
  68.  
  69.  
  70.  
  71. function deleteOption() { 
  72.  
  73.      
  74.  
  75.  
  76.  
  77.  
  78. function setsubclass(main){ 
  79.  
  80. var is_selected="N"
  81.  
  82. if (document.frm.subclass.options.length!=0) {  
  83.  
  84. for (i=0;i<=document.frm.subclass.options.length;i++) 
  85.  
  86. document.frm.subclass.options[i]=null ; 
  87.  
  88.  
  89. //重复才有效 
  90.  
  91. if (document.frm.subclass.options.length!=0) {  
  92.  
  93. for (i=0;i<=document.frm.subclass.options.length;i++){ 
  94.  
  95. document.frm.subclass.options[i]=null ; 
  96.  
  97. document.frm.subclass.options.remove(i); 
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105. for (i=0;i<xmlObj.childNodes.length;i++){ 
  106.  
  107.  
  108.  
  109. var values=""
  110.  
  111. var lables=""
  112.  
  113.  
  114.  
  115. if (is_selected=="Y") return; 
  116.  
  117. labels=xmlObj.childNodes(i).getAttribute("display_name"); 
  118.  
  119. values=xmlObj.childNodes(i).text; 
  120.  
  121. //alert(labels+ " | "+main); 
  122.  
  123. if (labels==main){ 
  124.  
  125.  
  126.  
  127. is_selected="Y"
  128.  
  129.  
  130.  
  131. for (j=0;j<xmlObj.childNodes(i).childNodes.length;j++){ 
  132.  
  133. //subclass_name="document.frm.subclass"
  134.  
  135. labels=xmlObj.childNodes(i).childNodes(j).getAttribute("display_name"); 
  136.  
  137. values=xmlObj.childNodes(i).childNodes(j).text; 
  138.  
  139. //alert(values);  
  140.  
  141. document.frm.subclass.add(document.createElement("OPTION")); 
  142.  
  143. document.frm.subclass.options[j].text=labels;  
  144.  
  145. document.frm.subclass.options[j].value=values;  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157. </script> 
  158.  
  159.  
  160.  
  161. <title>在HTML中调用XML数据</title> 
  162.  
  163. </head> 
  164.  
  165. <body bgcolor="#FFFFFF"> 
  166.  
  167. <FORM NAME="frm">  
  168.  
  169. 类型<SELECT NAME="mainclass" OnChange='setsubclass(this[selectedIndex].text)'></SELECT> 
  170.  
  171. <option selected value=""  ></option> 
  172.  
  173. 子类<SELECT NAME="subclass"></SELECT> 
  174.  
  175. </form> 
  176.  
  177. </body> 
  178.  
  179. </html> 

account.xml 如下:

  1. <?xml version="1.0" encoding="GB2312"?> 
  2.  
  3.  
  4.  
  5. <item> 
  6.  
  7. <class display_name="未选定"> 
  8.  
  9. <subclass display_name="">Not Available</subclass>  
  10.  
  11. </class> 
  12.  
  13. <class display_name="95788主叫卡"> 
  14.  
  15. <subclass display_name="1152069589-1152069638">dangdang1</subclass>  
  16.  
  17. <subclass display_name="1152081031-1152081080">dangdang2</subclass> 
  18.  
  19. <subclass display_name="1152547201-1105254750">dangdang3</subclass> 
  20.  
  21. <subclass display_name="1152548401-1152548700">dangdang4</subclass> 
  22.  
  23. <subclass display_name="1152548701-1152549000">dangdang5</subclass> 
  24.  
  25. <subclass display_name="1156000001-1156010000">dangdang6</subclass> 
  26.  
  27. </class> 
  28.  
  29. <class display_name="网上注册"> 
  30.  
  31. <subclass display_name="1152000001-1152001000">zhuce_user1</subclass>  
  32.  
  33. <subclass display_name="1151001000-1151005000">zhuce_user2</subclass> 
  34.  
  35. </class> 
  36.  
  37. <class display_name="通讯"> 
  38.  
  39. <subclass display_name="1156030001-1156080000">tongxun</subclass>  
  40.  
  41. </class> 
  42.  
  43.  
  44.  
  45. </item> 

此方法将数据源与javascript程序分开,适合经常变化的数据源。xmlDoc.load中可以直接调用URL参数,读取远程XML,实
现松耦合。以上应用在IE6.0中通过。不足之处是在去除下拉框列表内容时需要重复执行删除操作,否则会有明显的bug.希望有读者能给指正。

  1. <html> 
  2.  
  3. <head> 
  4.  
  5. <title>List</title> 
  6.  
  7. <meta http-equiv="Content-Type" content="text/html; c 
  8.  
  9. harset=gb2312"> 
  10.  
  11. <script LANGUAGE="javascript"> 
  12.  
  13. <!-- 
  14.  
  15. var onecount; 
  16.  
  17. onecount=0
  18.  
  19.  
  20.  
  21. subcat = new Array(); 
  22.  
  23. subcat[0] = new Array("徐汇区","01","001"); 
  24.  
  25. subcat = new Array("嘉定区","01","002"); 
  26.  
  27. subcat = new Array("黄浦区","01","003"); 
  28.  
  29. subcat = new Array("南昌市","02","004"); 
  30.  
  31. subcat = new Array("九江市","02","005"); 
  32.  
  33. subcat = new Array("上饶市","02","006"); 
  34.  
  35.  
  36.  
  37. onecount=6
  38.  
  39.  
  40.  
  41. function changelocation(locationid) 
  42.  
  43.  
  44. document.myform.smalllocation.length = 0
  45.  
  46.  
  47.  
  48. var locationidlocationid=locationid; 
  49.  
  50. var i; 
  51.  
  52. document.myform.smalllocation.options[0] = new Option('====所有地区====','); 
  53.  
  54. for (i=0;i <onecount; i++) 
  55.  
  56.  
  57. if (subcat[i] == locationid) 
  58.  
  59.  
  60. document.myform.smalllocation.options[document.myform.smalllocation.length] 
  61.  
  62. = new Option(subcat[i][0], subcat[i]); 
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71. //--> 
  72.  
  73. </script> 
  74.  
  75. </head> 
  76.  
  77. <body> 
  78.  
  79. <form name="myform" method="post"> 
  80.  
  81. <select name="biglocation" 
  82.  
  83. onChange="changelocation(document.myform.biglocation.options[document.myform.biglocation.selectedIndex].value)"> 
  84.  
  85. <option value="01" selected>上海</option> 
  86.  
  87. <option value="02">江西</option> 
  88.  
  89. </select> 
  90.  
  91. <select name="smalllocation"> 
  92.  
  93. <option selected value="">==所有地区==</option> 
  94.  
  95. </select> 
  96.  
  97. </form> 
  98.  
  99. <script LANGUAGE="javascript"> 
  100.  
  101. <!-- 
  102.  
  103. changelocation(document.myform.biglocation.options[document.myform.biglocation.selectedIndex].value); 
  104.  
  105. //--> 
  106.  
  107. </script> 
  108.  
  109. </body> 
  110.  
  111. </html> 
  • 下一篇资讯: 完美注册表操作类
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师