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实现仿Windows关机效果
Mar 10 Javascript
基于jquery实现点击左右按钮图片横向滚动
Apr 11 Javascript
js同比例缩放图片的小例子
Oct 30 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
Mar 10 Javascript
javascript同步服务器时间和同步倒计时小技巧
Sep 24 Javascript
js微信扫描二维码登录网站技术原理
Dec 01 Javascript
vue实现提示保存后退出的方法
Mar 15 Javascript
JavaScript实现一个带AI的井字棋游戏源码
May 21 Javascript
vue移动端轻量级的轮播组件实现代码
Jul 12 Javascript
分享5个好用的javascript文件上传插件
Sep 16 Javascript
vue实现侧边栏导航效果
Oct 21 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
Jan 20 Vue.js
网页里控制图片大小的相关代码
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实现的获取URL信息的类
2007/01/02 PHP
PHP实现模仿socket请求返回页面的方法
2014/11/04 PHP
详解在PHP的Yii框架中使用行为Behaviors的方法
2016/03/18 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
2018/06/05 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
jquery监听div内容的变化具体实现思路
2013/11/04 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
jQuery插件实现文字无缝向上滚动效果代码
2016/02/25 Javascript
Javascript中Date类型和Math类型详解
2016/02/27 Javascript
jQuery实现图片滑动效果
2017/03/08 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
深入理解Vue-cli搭建项目后的目录结构探秘
2017/07/13 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
javascript观察者模式实现自动刷新效果
2017/09/05 Javascript
表格展示利器 Bootstrap Table实例代码
2017/09/06 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
2017/09/19 Javascript
vue2.0父子组件间传递数据的方法
2018/08/16 Javascript
小程序实现单选多选功能
2018/11/04 Javascript
Nodejs中获取当前函数被调用的行数及文件名详解
2018/12/12 NodeJs
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
Python实现端口复用实例代码
2014/07/03 Python
Python读写Json涉及到中文的处理方法
2016/09/12 Python
python数据批量写入ScrolledText的优化方法
2018/10/11 Python
解决python写入带有中文的字符到文件错误的问题
2019/01/31 Python
详解Python3中ceil()函数用法
2019/02/19 Python
python 调用钉钉机器人的方法
2019/02/20 Python
python多进程(加入进程池)操作常见案例
2019/10/21 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
Python自动化办公Excel模块openpyxl原理及用法解析
2020/11/05 Python
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
护理职业应聘自荐书
2013/09/29 职场文书
创业者迈进成功第一步:如何写创业计划书?
2014/03/22 职场文书
户籍证明书标准模板
2014/09/10 职场文书
红色经典电影观后感
2015/06/18 职场文书
话题作文之生命的旋律
2019/12/17 职场文书