Javascript 调用XML制作连动下拉框

2016-02-19 21:17 4 1 收藏

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

【 tulaoshi.com - Web开发 】

  作者: 何耀
  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;

  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;

  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++){

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

  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

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

  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.希望有读者能给指正。
  

来源:http://www.tulaoshi.com/n/20160219/1625788.html

延伸阅读
标签: Web开发
HTML HEAD titleAjax实现无刷新三联动下拉框/title meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR" meta content="C#" name="CODE_LANGUAGE" meta content="JavaScript" name="vs_defaultClientScript" meta content="http://schemas.microsoft.com/intellis...
  问题提出: 我用dw做了一个下拉菜单,但是碰到form的列表项就跑到下面去了,请帮忙解决,请看问题图示如下: 解决问题: 由于层与下拉框之间的优先级是:下拉框  层,因此在显示的时候,会因为优先级的次序而会出现如上问题。(如果几个元素都是层的话,我们可以通过层的 z-index 属性来设置)解决办法就是:给层中...
标签: Web开发
代码如下:             function divPosition(){                 var clx,cly;                &...
标签: Web开发
1.此代码适合所有下拉列表取值 2.一个项目所有的下拉列表只需要这一个公用方法; 步骤一:创建实体bean ; 代码如下: public class DictionaryBean { private String value_Id;//下拉框option的id private String value;//下拉框option的值 private String flag;//对应下拉框的值的类型,如flag=1,下拉列表为省份信息,flag=2为市级...
标签: Web开发
即在触发地区下拉框的onchange事件时,代理商的下拉框选项也相应的改变,比如选择地区 湖南—〉长沙,那么代理商下拉框只显示长沙的代理商。 本来认为这个很好实现,但实际改起来的时候发现问题多多,主要问题是原有的地区联动是用js实现的,它的数据源是一个xml文件,当然如果下拉框是服务器端控件那么问题是很好解决的,现在是html控件一下...

经验教程

864

收藏

11
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部