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 相关文章推荐
jquery 1.3.2 IE8中的一点点的小问题解决方法
Jul 10 Javascript
DOM2非标准但却支持很好的几个属性小结
Jan 21 Javascript
UpdatePanel和Jquery冲突的解决方法
Apr 01 Javascript
Ajax异步提交表单数据的说明及方法实例
Jun 22 Javascript
jQuery简单实现遍历数组的方法
Apr 14 Javascript
超赞的jQuery图片滑块动画特效代码汇总
Jan 25 Javascript
前端JS面试中常见的算法问题总结
Dec 23 Javascript
JavaScript对象封装的简单实现方法(3种方法)
Jan 03 Javascript
jquery基于layui实现二级联动下拉选择(省份城市选择)
Jun 20 jQuery
实例学习JavaScript读取和写入cookie
Jan 29 Javascript
少女风vue组件库的制作全过程
May 15 Javascript
解决VUE双向绑定失效的问题
Oct 29 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
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
php设计模式 Proxy (代理模式)
2011/06/26 PHP
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
php中mysql连接方式PDO使用详解
2015/02/25 PHP
PHP IDE phpstorm 常用快捷键
2015/05/18 PHP
php实现通过cookie换肤的方法
2015/07/13 PHP
PHP+MYSQL实现读写分离简单实战
2017/03/13 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
js删除Array数组中指定元素的两种方法
2016/08/03 Javascript
Javascript中常用的检测方法小结
2016/10/08 Javascript
Vue.js系列之vue-router(上)(3)
2017/01/03 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
JS简单实现父子窗口传值功能示例【未使用iframe框架】
2017/09/20 Javascript
vue利用axios来完成数据的交互
2018/03/23 Javascript
微信小程序用户授权弹窗 拒绝时引导用户重新授权实现
2019/07/29 Javascript
基于canvasJS在PHP中制作动态图表
2020/05/30 Javascript
Python实现的几个常用排序算法实例
2014/06/16 Python
windows下Virtualenvwrapper安装教程
2017/12/13 Python
Django中URL的参数传递的实现
2019/08/04 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
2019/09/28 Python
Python线程条件变量Condition原理解析
2020/01/20 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
python 8种必备的gui库
2020/08/27 Python
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
小学英语教学反思案例
2014/02/04 职场文书
一年级学生期末评语
2014/04/21 职场文书
建筑安全标语
2014/06/07 职场文书
2014年幼儿园老师工作总结
2014/12/05 职场文书
2014年学校工会工作总结
2014/12/06 职场文书
高温慰问简报
2015/07/21 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis
中国十大神话动漫电影排行榜 哪吒登顶 白蛇缘起排第七
2022/03/21 国漫