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 相关文章推荐
Iframe 自适应高度并实时监控高度变化的js代码
Oct 30 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
Jun 30 Javascript
浅谈Javascript Base64 加密解密
Dec 28 Javascript
jQuery中[attribute*=value]选择器用法实例
Dec 31 Javascript
javascript实现状态栏中文字动态显示的方法
Oct 20 Javascript
js拖拽的原型声明和用法总结
Apr 04 Javascript
jQuery属性选择器用法示例
Sep 09 Javascript
BootStrap Datetimepicker 汉化的实现代码
Feb 10 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
Dec 11 jQuery
vue项目前端埋点的实现
Mar 06 Javascript
微信小程序8种数据通信的方式小结
Feb 03 Javascript
10分钟学会js处理json的常用方法
Dec 06 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
咖啡店都有些什么常规豆子呢?有什么风味在里面
2021/03/04 咖啡文化
支持php4、php5的mysql数据库操作类
2008/01/10 PHP
php实现网站留言板功能
2015/11/04 PHP
PHP中addcslashes与stripcslashes函数用法分析
2016/01/07 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
几款极品的javascript压缩混淆工具
2007/05/16 Javascript
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
高性能Javascript笔记 数据的存储与访问性能优化
2012/08/02 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
JQuery筛选器全系列介绍
2013/08/27 Javascript
常用的JavaScript验证正则表达式汇总
2013/11/26 Javascript
一段非常简单的js判断浏览器的内核
2014/08/17 Javascript
用简洁的jQuery方法toggleClass实现隔行换色
2014/10/22 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
2015/08/28 Javascript
Vue.js第三天学习笔记(计算属性computed)
2016/12/01 Javascript
JavaScript实用代码小技巧
2018/08/23 Javascript
vue里面v-bind和Props 利用props绑定动态数据的方法
2018/08/27 Javascript
vue使用Font Awesome的方法步骤
2019/02/26 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
python实现每次处理一个字符的三种方法
2014/10/09 Python
python绘制散点图并标记序号的方法
2018/12/11 Python
django admin后台添加导出excel功能示例代码
2019/05/15 Python
宝拉珍选英国官网:Paula’s Choice英国
2019/05/29 全球购物
Tuckernuck官网:经典的美国品质服装、鞋子和配饰
2021/01/11 全球购物
linux面试题参考答案(9)
2016/01/29 面试题
AURALog面试题软件测试方面
2013/10/22 面试题
公务员保密承诺书
2014/03/27 职场文书
少儿节目主持串词
2014/04/02 职场文书
初三开学计划书
2014/04/27 职场文书
青年文明号汇报材料
2014/12/23 职场文书
写给纪委的违纪检讨书
2015/05/05 职场文书
关于军训的感想
2015/08/07 职场文书
优秀团员主要事迹材料
2015/11/05 职场文书
小学生节约用水倡议书
2019/08/12 职场文书
PostgreSQL数据库创建并使用视图以及子查询
2022/04/11 PostgreSQL