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 相关文章推荐
js、css、img等浏览器缓存问题的2种解决方案
Oct 23 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
Dec 25 Javascript
分享一款基于jQuery的视频播放插件
Oct 09 Javascript
使用jquery动态加载js文件的方法
Dec 24 Javascript
推荐一个自己用的封装好的javascript插件
Jan 29 Javascript
AngularJS实现一次监听多个值发生的变化
Aug 31 Javascript
WEB 前端开发中防治重复提交的实现方法
Oct 26 Javascript
基于JavaScript实现全选、不选和反选效果
Feb 15 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
May 17 Javascript
vue单页应用中如何使用jquery的方法示例
Jul 27 jQuery
Ant Design的Table组件去除
Oct 24 Javascript
JavaScript实现消消乐的源代码
Jan 12 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
java EJB 加密与解密原理的一个例子
2008/01/11 PHP
PHP实现在线阅读PDF文件的方法
2015/06/23 PHP
深入解析PHP的Yii框架中的event事件机制
2016/03/17 PHP
PHP连接MySQL数据库操作代码实例解析
2020/07/11 PHP
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
2016/05/13 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
node.js+captchapng+jsonwebtoken实现登录验证示例
2017/08/17 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
[03:14]辉夜杯主赛事 12月25日每日之星
2015/12/26 DOTA
[54:26]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第一场 12.10
2020/12/12 DOTA
python操作CouchDB的方法
2014/10/08 Python
Python Queue模块详细介绍及实例
2016/12/27 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
2017/09/20 Python
Python实现感知器模型、两层神经网络
2017/12/19 Python
Python3 XML 获取雅虎天气的实现方法
2018/02/01 Python
Python实现统计给定字符串中重复模式最高子串功能示例
2018/05/16 Python
详解安装mitmproxy以及遇到的坑和简单用法
2019/01/21 Python
python random从集合中随机选择元素的方法
2019/01/23 Python
Python中print和return的作用及区别解析
2019/05/05 Python
使用Python将字符串转换为格式化的日期时间字符串
2019/09/01 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
使用Python 自动生成 Word 文档的教程
2020/02/13 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
实例讲解使用SVG制作loading加载动画的方法
2016/04/05 HTML / CSS
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
化妆品店促销方案
2014/02/24 职场文书
户外宣传策划方案
2014/05/25 职场文书
承诺书格式
2014/06/03 职场文书
2014年技术员工作总结
2014/11/18 职场文书