Javascript调用XML制作连动下拉列表框


Posted in Javascript onJune 25, 2006

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

<html>
<head>
<title>List</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;i<xmlObj.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 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;i<xmlObj.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;j<xmlObj.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="推荐网站">
  <subclass display_name="看上去很美">www.7say.com</subclass>
  <subclass display_name="移动互联">www.xj139.com</subclass>
  <subclass display_name="众信实业">www.xjzxsy.com</subclass>
 </class>
 <class display_name="门户网站">
  <subclass display_name="新浪">www.sina.com</subclass>
  <subclass display_name="搜狐">www.sohu.com</subclass>
 </class>
 <class display_name="其它网站">
  <subclass display_name="蓝色理想">www.blueidea.com</subclass>
 </class>
</item>

Javascript 相关文章推荐
javascript代码加载优化方法
Jan 30 Javascript
js点击页面其它地方将某个显示的DIV隐藏
Jul 12 Javascript
AngularJS iframe跨域打开内容时报错误的解决办法
Jan 26 Javascript
angularJS中router的使用指南
Feb 09 Javascript
vuejs实现本地数据的筛选分页功能思路详解
Nov 15 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
Jan 02 Javascript
微信小程序仿RadioGroup改变样式的处理方案
Jul 13 Javascript
vue实现文件上传功能
Aug 13 Javascript
详解javascript appendChild()的完整功能
Aug 18 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
Apr 16 Javascript
javascript原型链学习记录之继承实现方式分析
May 01 Javascript
JavaScript最完整的深浅拷贝实现方式详解
Feb 28 Javascript
网页里控制图片大小的相关代码
Jun 25 #Javascript
如何取得中文输入的真实长度?
Jun 24 #Javascript
快速保存网页中所有图片的方法
Jun 23 #Javascript
网页常用特效代码整理
Jun 23 #Javascript
文本加密解密
Jun 23 #Javascript
解密效果
Jun 23 #Javascript
CheckBox 如何实现全选?
Jun 23 #Javascript
You might like
PHP+AJAX实现无刷新注册(带用户名实时检测)
2007/01/02 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
关于PHP转换超过2038年日期出错的问题解决
2017/06/28 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
jQuery中add实现同时选择两个id对象
2010/10/22 Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
JS使用getComputedStyle()方法获取CSS属性值
2014/04/23 Javascript
node.js中Socket.IO的进阶使用技巧
2014/11/04 Javascript
node.js中的console.assert方法使用说明
2014/12/10 Javascript
javascript返回顶部的按钮实现方法
2016/01/09 Javascript
jQuery实现打开页面渐现效果示例
2016/07/27 Javascript
three.js绘制地球、飞机与轨迹的效果示例
2017/02/28 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
javascript编写简易计算器
2017/05/06 Javascript
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
mpvue写一个CPASS小程序的示例
2018/09/04 Javascript
送你43道JS面试题(收藏)
2019/06/17 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
nodejs实现聊天机器人功能
2019/09/19 NodeJs
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
[01:10]3.19DOTA2发布会 三代刀塔人第一代
2014/03/25 DOTA
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
python通过tcp发送xml报文的方法
2018/12/28 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
friso美素佳儿官方海外旗舰店:荷兰原产原罐
2017/07/03 全球购物
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
生产部主管岗位职责
2014/01/06 职场文书
精彩广告词大全
2014/03/19 职场文书
小学数学教研活动总结
2014/07/01 职场文书
2015年社区教育工作总结
2015/05/13 职场文书
Nginx 过滤静态资源文件的访问日志的实现
2021/03/31 Servers
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js
MySQL创建管理RANGE分区
2022/04/13 MySQL