ajax动态级联

function ajaxRequest(){
 var parent = document.getElementById('province');
 var province = parent.options[parent.selectedIndex].value;
 var options = {
  url:'ajax/'+province+'.xml',
  listener:callback,
  method:'GET',
  failListener:failCallback
 }
 var request = createRequest(options);
 request.send(null);
}
function removeChildren(parent) {
    while (parent.firstChild) {
         parent.removeChild(parent.firstChild);
    }
    return parent;
}
function createRequest(options){
 var req = false;
 if(window.XMLHttpRequest) {
  var req = new window.XMLHttpRequest();
 } else if (window.ActiveXObject) {
  var req = new window.ActiveXObject('Microsoft.XMLHTTP');
 }
 if(!req) return false;
 req.onreadystatechange = function(){
  if (req.readyState ==4 && req.status == 200){
   options.listener.call(req);
  }else if(req.readyState ==4 && req.status == 404){
   options.failListener.call(req)
  }
 };
 req.open(options.method,options.url,true);
 return req;
}
function callback(){
 var xmlDoc = this.responseXML;
 var root = xmlDoc.getElementsByTagName('root')[0];
 var cities = root.getElementsByTagName("city");
 //构建label
 var label1 = document.createElement('LABEL');
 label1.setAttribute('for', 'city');
  var txt1 = document.createTextNode('城市:');
  label1.appendChild(txt1);
 //开始构建城市的select
 var citySelect = document.createElement('SELECT');
  citySelect.setAttribute('id', 'city');
  citySelect.setAttribute('name', 'city');
 //添加城市select的options。
 var cuurentCity = null;
 var cityOptions = [];
 var txt = [];
 for(var i = 0; i < cities.length; i++) {
  cuurentCity = cities[i].childNodes[0].nodeValue;
   cityOptions[i] = document.createElement('OPTION');
   cityOptions[i].setAttribute('value', cuurentCity);
   txt[i] = document.createTextNode(cuurentCity);
   cityOptions[i].appendChild(txt[i]);
  citySelect.appendChild(cityOptions[i]);
 }
 var test = document.getElementById('test');
 removeChildren(test);
 test.appendChild(label1);
 test.appendChild(citySelect);
}
function failCallback(){
 var test = document.getElementById('test');
 test.innerHTML = '直辖市!';
}
function addEventSimple(obj,evt,fn){
 if(obj.addEventListener){
  obj.addEventListener(evt,fn,false);
 }else if(obj.attachEvent){
  obj.attachEvent('on'+evt,fn);
 }
}
addEventSimple(window,'load',function(){
var p1 = document.createElement('P');
 var label1 = document.createElement('LABEL');
 label1.setAttribute('for', 'province');
 p1.appendChild(label1);
  var txt1 = document.createTextNode('省/直辖市:');
  label1.appendChild(txt1);
 var select1 = document.createElement('SELECT');
 select1.οnchange= function(){ajaxRequest()}
 select1.setAttribute('id', 'province');
 select1.setAttribute('name', 'province');
 p1.appendChild(select1);
  var option1 = document.createElement('OPTION');
  option1.setAttribute('value', 'beijing');
  select1.appendChild(option1);
   var txt2 = document.createTextNode('北京');
   option1.appendChild(txt2);
  var option2 = document.createElement('OPTION');
  option2.setAttribute('value', 'liaoning');
  select1.appendChild(option2);
   var txt3 = document.createTextNode('辽宁');
   option2.appendChild(txt3);
  var option3 = document.createElement('OPTION');
  option3.setAttribute('value', 'shanxi');
  select1.appendChild(option3);
   var txt4 = document.createTextNode('山西');
   option3.appendChild(txt4);
var test = document.getElementById('test');
test.parentNode.insertBefore(p1,test);
});

 

======================

ajax/liaoling.xml

<root>

  < city > 沈阳 </ city >
  < city > 大连 </ city >
  < city > 本溪 </ city >
  < city > 阜新 </ city >
  < city > 葫芦岛 </ city >
  < city > 盘锦 </ city >
  < city > 铁岭 </ city >
  < city > 丹东 </ city >
  < city > 锦州 </ city >
  < city > 营口 </ city >
  < city > 鞍山 </ city >
  < city > 辽阳 </ city >
  < city > 抚顺 </ city >
  < city > 朝阳 </ city >
  < city > 瓦房店 </ city >
  </ root >

http://www.earthol.com/city.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
级联下拉菜单,也叫联动菜单,是指一个下拉菜单的选项会影响到另一个下拉菜单的选项。基于ajax级联下拉菜单就是使用ajax技术实现这种联动效果。 下面是一个基于ajax级联下拉菜单的实现步骤: 1. 编写HTML代码,包括两个或多个下拉菜单。 ``` <select id="select1"> <option value="">请选择</option> <option value="1">选项1</option> <option value="2">选项2</option> <option value="3">选项3</option> </select> <select id="select2"> <option value="">请选择</option> </select> ``` 2. 给第一个下拉菜单绑定onchange事件,当其选项改变时触发。 ``` <script> $(function(){ $("#select1").change(function(){ // 发送ajax请求 }); }); </script> ``` 3. 在onchange事件处理函数中发送ajax请求,根据第一个下拉菜单选中的值,获取第二个下拉菜单的选项。 ``` $.ajax({ type: "POST", url: "getData.php", data: { selectedValue: $("#select1").val() }, success: function(data){ // 解析返回的数据,生成第二个下拉菜单的选项 } }); ``` 4. 在ajax请求成功后,解析返回的数据,生成第二个下拉菜单的选项。 ``` success: function(data){ $("#select2").empty(); // 解析返回的数据 $.each(data, function(index, value){ $("#select2").append("<option value='" + value.id + "'>" + value.name + "</option>"); }); } ``` 完整的基于ajax级联下拉菜单代码示例: ``` <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>基于ajax级联下拉菜单</title> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script> $(function(){ $("#select1").change(function(){ $.ajax({ type: "POST", url: "getData.php", data: { selectedValue: $("#select1").val() }, success: function(data){ $("#select2").empty(); $.each(data, function(index, value){ $("#select2").append("<option value='" + value.id + "'>" + value.name + "</option>"); }); } }); }); }); </script> </head> <body> <select id="select1"> <option value="">请选择</option> <option value="1">选项1</option> <option value="2">选项2</option> <option value="3">选项3</option> </select> <select id="select2"> <option value="">请选择</option> </select> </body> </html> ``` 最后需要注意的是,需要编写一个接口,用于处理ajax请求,并返回第二个下拉菜单的选项数据。在上述代码示例中,请求的接口地址为"getData.php",需要根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值