Javascript 调用XML制作连动下拉框

倾慕年

倾慕年

2016-02-19 21:17

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是Javascript 调用XML制作连动下拉框,一起来学习了解下吧!

  作者: 何耀
  Thursday, June 5 2003 2:44 PM
   

  传统的HTML页面中连动下拉框采用了两种方法:
  1)直接将下拉框中的内容hardcode于html的javascript中,调用javascript函数循环写入下拉框中。这种方法不适用于下拉框内容经常改变的情况。因为数据源和javascript程序写死在同一页面。
    
  html
  head
  titleList/title
  meta http-equiv="Content-Type" content="text/html; c
  harset=gb2312"
  script LANGUAGE="javascript"
  !--
  var onecount;
  onecount=0;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)

  subcat = new Array();
  subcat[0] = new Array("徐汇区","01","001");
  subcat[1] = new Array("嘉定区","01","002");
  subcat[2] = new Array("黄浦区","01","003");
  subcat[3] = new Array("南昌市","02","004");
  subcat[4] = new Array("九江市","02","005");
  subcat[5] = new Array("上饶市","02","006");

  onecount=6;

  function changelocation(locationid)
  {
  document.myform.smalllocation.length = 0;

  var locationid=locationid;
  var i;
  document.myform.smalllocation.options[0] = new Option('====所有地区====','');
  for (i=0;i onecount; i++)
  {
  if (subcat[i][1] == locationid)
  {
  document.myform.smalllocation.options[document.myform.smalllocation.length]
  = new Option(subcat[i][0], subcat[i][2]);
  }
  }

  }

  //--
  /script
  /head
  body
  form name="myform" method="post"
  select name="biglocation"
  onChange="changelocation(document.myform.biglocation.options[document.myform.biglocation.selectedIndex].value)"
  option value="01" selected上海/option
  option value="02"江西/option
  /select
  select name="smalllocation"
  option selected value=""==所有地区==/option
  /select
  /form
  script LANGUAGE="javascript"
  !--
  changelocation(document.myform.biglocation.options[document.myform.biglocation.selectedIndex].value);
  //--
  /script
  /body
  /html

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

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

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

  html
  head
  script language="JavaScript" for="window" event="onload"
  var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  var i=0;
  var j=0;
  var subclass_name="";
  loadXML();
  function loadXML(){
  xmlDoc.async="false";
  xmlDoc.load("account.xml");
  xmlObj=xmlDoc.documentElement;
  nodes = xmlDoc.documentElement.childNodes;
  document.frm.mainclass.options.length = 0;
  document.frm.subclass.options.length = 0;

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)

  for (i=0;ixmlObj.childNodes.length;i++){
  labels=xmlObj.childNodes(i).getAttribute("display_name");
  values=xmlObj.childNodes(i).text;
  document.frm.mainclass.add(document.createElement("OPTION"));
  document.frm.mainclass.options[i].text=labels;
  document.frm.mainclass.options[i].value=values;

  }

  }

  
  /script

  script language="JavaScript"
  var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  var i=0;
  var j=0;

  function deleteOption() {
     
  }

  function setsubclass(main){
  var is_selected="N";
  if (document.frm.subclass.options.length!=0) {
  for (i=0;i=document.frm.subclass.options.length;i++)
  document.frm.subclass.options[i]=null ;
  }
  //重复才有效
  if (document.frm.subclass.options.length!=0) {
  for (i=0;i=document.frm.subclass.options.length;i++){
  document.frm.subclass.options[i]=null ;
  document.frm.subclass.options.remove(i);
  }
  }

  
  for (i=0;ixmlObj.childNodes.length;i++){

  var values="";
  var lables="";

  if (is_selected=="Y") return;
  labels=xmlObj.childNodes(i).getAttribute("display_name");
  values=xmlObj.childNodes(i).text;
  //alert(labels+ " | "+main);
  if (labels==main){

  is_selected="Y";

  for (j=0;jxmlObj.childNodes(i).childNodes.length;j++){
  //subclass_name="document.frm.subclass";
  labels=xmlObj.childNodes(i).childNodes(j).getAttribute("display_name");
  values=xmlObj.childNodes(i).childNodes(j).text;
  //alert(values);
  document.frm.subclass.add(document.createElement("OPTION"));
  document.frm.subclass.options[j].text=labels;
  document.frm.subclass.options[j].value=values;

  }

  }

  }
  }
  /script

  title在HTML中调用XML数据/title
  /head
  body bgcolor="#FFFFFF"
  FORM NAME="frm"
  类型SELECT NAME="mainclass" OnChange='setsubclass(this[selectedIndex].text)'/SELECT
  option selected value=""  /option
  子类SELECT NAME="subclass"/SELECT
  /form
  /body
  /html

  account.xml 如下:

  
  ?xml version="1.0" encoding="GB2312"?

  item
  class display_name="未选定"
  subclass display_name=""Not Available/subclass
  /class
  class display_name="95788主叫卡"
  subclass display_name="1152069589-1152069638"dangdang1/subclass
  subclass display_name="1152081031-1152081080"dangdang2/subclass
  subclass display_name="1152547201-1105254750"dangdang3/subclass
  subclass display_name="1152548401-1152548700"dangdang4/subclass
  subclass display_name="1152548701-1152549000"dangdang5/subclass
  subclass display_name="1156000001-1156010000"dangdang6/subclass
  /class
  class display_name="网上注册"
  subclass display_name="1152000001-1152001000"zhuce_user1/subclass
  subclass display_name="1151001000-1151005000"zhuce_user2/subclass
  /class
  class display_name="通讯"
  subclass display_name="1156030001-1156080000"tongxun/subclass
  /class

  /item

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

展开更多 50%)
分享

猜你喜欢

Javascript 调用XML制作连动下拉框

Web开发
Javascript 调用XML制作连动下拉框

下拉框连动的小例子(.htm版)

ASP
下拉框连动的小例子(.htm版)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

下拉框连动的小例子(数据库版)

ASP
下拉框连动的小例子(数据库版)

JavaScript 图标美化的下拉框

Web开发
JavaScript 图标美化的下拉框

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

三级下拉框连动的数据库版

ASP
三级下拉框连动的数据库版

可输入的下拉框

Web开发
可输入的下拉框

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

如何解决SQL Server占用内存过多的问题

如何解决SQL Server占用内存过多的问题

Dreamweaver MX 2004从零开始之七

Dreamweaver MX 2004从零开始之七
下拉加载更多内容 ↓