论坛首页 Web前端技术论坛

AJAX实现的简单的下拉框二级级联

浏览 15338 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (4)
作者 正文
   发表时间:2010-05-28   最后修改:2010-05-28

      AJAX实现的简单的无刷新效果,页面中有两个下拉框,当第一个下拉框改变时,提交请求到后台,查找到对应的数据,添加到第二个下拉框列表里。代码如下:

<html>
 <head>
  <script type="text/javascript">


   //Ajax实现下拉框二级级联,根据第一个下拉框的值改变第二个下拉框内的列表

   //根据浏览器的类型,创建xmlHttpRequest对象
   function createXmlHttpRequest()
    {
        if(window.ActiveXObject)
        {
            return new ActiveXObject("Microsoft.XMLHTTP");
        }
        else if( window.XMLHttpRequest())
        {
            return new XMLHttpRequest();
        }    
    }
    var xmlHttpRequest;
  
    //异步响应函数 
    function search(para)
    {
        var url="/search?para="+para;     //后台请求的路径
      
        xmlHttpRequest=createXmlHttpRequest();
      
        xmlHttpRequest.onreadystatechange=callback;   //将回调函数注册给状态改变事件
      
        xmlHttpRequest.open("GET",url,true);
      
        xmlHttpRequest.send(null);
          
    }    
   
   //回调函数
    function callback()
    {     
         var dlCity=document.getElementById("city");

 

         //请求被成功响应,已接收到结果
         if(xmlHttpRequest.readyState==4&&xmlHttpRequest.status==200)
         {                    
             var result=xmlHttpRequest.responseText;          //返回的结果字符串 
             //var result = "哈尔滨|大庆||鹤岗|佳木斯|牡丹江"; 
                        
            var cityArray= result.split("|");   //返回的结果字符串中,值之间是以|分隔的,所以先拆分成数组
            var count = cityArray.length; 
            dlCity.length=0;   //先将下拉列表框清空
            for (var i = 0; i <count; i++) 
            {   
                dlCity.options.add(new Option(cityArray[i], cityArray[i]));   //将结果循环添加到下拉列表中
            }  
           
         }
         else
         {
             dlCity.length=0;
             dlCity.options.add(new Option("请等待...","-1"));
         }
        
    }
    
 //下拉框改变事件
 function changeCityOptions()
 {
     var dlProvince=document.getElementById("province");
     var dlCity=document.getElementById("city");
     dlCity.length=0;
     if(dlProvince.value==-1)
     {    
         dlCity.options.add(new Option("城市列表","-1"));
     }
     else
     {
         search(dlProvince.value);
     } 
    return;   
 }
  </script>
</head>
<body>
 <select name="province"  id="province" onchange="changeCityOptions()">
  <option value="-1">选择省份</option>

  <option value="1">黑龙江</option>

  <option value="2">吉林</option>
 </select>
 <select name="city" id="city">
  <option value="-1">城市列表</option>
 </select>
</body> 
</html>

 

   发表时间:2010-05-31  
楼主,建议使用jquery,弱弱的问一下,该代码在firfox下能执行吗?
0 请登录后投票
   发表时间:2010-05-31  
省份也应该从数据库中读取出来。。
不过建议楼主使用jQuery
0 请登录后投票
   发表时间:2010-05-31   最后修改:2010-05-31

省市区县

最近抽空把N久以前的一个地区选择控件改良了一下,效果如上

用的是自己的一个AJAX类,调用非常简单

 

 写道
(new Ajax()).get('./ajax_area.php?ajax=1&parent='+no,'area_'+(level+1),'',true);
  • 大小: 26.5 KB
0 请登录后投票
   发表时间:2010-06-01  
类似这样的,以前用ext写过,还是蛮简单的
0 请登录后投票
   发表时间:2010-06-02  
   看来大家对jquery 还是满意的
0 请登录后投票
   发表时间:2010-06-02  
用jquery和json会更简单些.当然,底层的原理还是要了解的
0 请登录后投票
   发表时间:2010-06-02  
mp_juan 写道
楼主,建议使用jquery,弱弱的问一下,该代码在firfox下能执行吗?

firefox下也支持的..
谢谢大家的建议,jquery确实不错,有空我会去研究下的。这个是个小练习,效果也很简单,大家请勿见笑。
0 请登录后投票
   发表时间:2010-06-02  
似乎在Chrome下失效!
0 请登录后投票
   发表时间:2010-06-05  
fyland 写道

省市区县

最近抽空把N久以前的一个地区选择控件改良了一下,效果如上

用的是自己的一个AJAX类,调用非常简单

 

 写道
(new Ajax()).get('./ajax_area.php?ajax=1&parent='+no,'area_'+(level+1),'',true);

这个挺漂亮的 贴源码啊

  • 大小: 1.4 MB
  • 大小: 1.4 MB
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics