+ -
当前位置:首页 → 问答吧 → php+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码

php+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码

时间:2006-12-31

来源:互联网

绝对原创


测试地址: http://www.mlmm.cn/mypage/?name=ceshi

在模板里的使用方法:

很简单的   

  1.先把  <script language="JavaScript" src="../include/js/regions.js"></script>
加到 header.html 页
  2.把 regionss() 函数 加到 /include/tag.php 里
  3.在你网站的根目录建立个  regions.php 文件
  4.在你的模板的适当的地方加入   {$regionss(中华人民共和国)}   即可  

注意:  表单的名字可根据你的需要可以自己修改...


测试页代码:


[Copy to clipboard]


复制内容到剪贴板
代码:
<html>
<head>
<meta http-equiv="Content-Type" c />
<title>php+ajax动态生成下拉菜单</title>
<script language="JavaScript" src="../include/js/regions.js"></script>
</head>
<body>
<form name="form1" method="post" action="">
<tr><td>{$regionss(中华人民共和国)}</td></tr>
</form>
</body>
</html>
regionss 函数代码:

CODE:

[Copy to clipboard]


复制内容到剪贴板
代码:
//省市地3级联动下拉菜单函数 regionss 省.市.地  
function regionss($country="中华人民共和国")
{      
        global $db; $i = 1;
        $text="<select id=\"select1\" name=\"select1\" onchange=\"startRequest()\" style=\"width:90px;\"><option value=\"\">省/市/自治区</option>\n";
      
        $result = $db->query("SELECT province FROM ".TABLE_PROVINCE." WHERE country='$country' ORDER BY provinceid");
        while($r = $db->fetch_array($result))
         {
  $text .= "<option value=".$r['province'].">".$r['province']."</option> ";
  $i++;
         }
        $text.="</select>";
        $text.=" <select id=\"select2\" name=\"select2\" onchange=\"startRequesta()\" style=\"width:90px;\"><option value=\"\">市/县/区</option></select>\n";
        $text.="<select id=\"select3\" name=\"select3\" style=\"width:90px;\"><option value=\"\">县级市/县</option></select>\n";   
        return $text;
                        
}
regions.js 的代码:

CODE:

[Copy to clipboard]


复制内容到剪贴板
代码:
//var ab = new Array();
var xmlHttp;
var xmlHttpa;
function createXMLHttpRequest() {
    if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }  
    else if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    }
}
function createXMLHttpRequesta() {
    if (window.ActiveXObject) {
        xmlHttpa = new ActiveXObject("Microsoft.XMLHTTP");
    }  
    else if (window.XMLHttpRequest) {
        xmlHttpa = new XMLHttpRequest();
    }
}  
   
function startRequest() {
    createXMLHttpRequest();
    createXMLHttpRequesta();
    xmlHttp.onreadystatechange = handleStateChange;
    xmlHttpa.onreadystatechange = handleStateChangearea;
    document.getElementById('select2').options.length = 0;
    document.getElementById('select3').options.length = 0;
    var url = document.form1.select1.value;
    var qurl = "/regions.php?province="+url+"&time="+new Date().getTime();
    xmlHttp.open("GET", qurl, true);
    xmlHttp.send(null);
    //setTimeout("startRequest()",2000);
}
     
function handleStateChange() {
    if(xmlHttp.readyState == 4) {
        if(xmlHttp.status == 200) {
         var obj = document.getElementById('select2'); //将服务器返回的字符串写到页面中ID为select2的区域   
            obja = document.getElementById('select3'); //将服务器返回的字符串写到页面中ID为select3的区域   
            eval(xmlHttp.responseText);   
        
        }
    }
}
function handleStateChangearea() {         
            eval(xmlHttpa.responseText);         
}
//var ab = new Array();

function startRequesta() {
    createXMLHttpRequesta();
    xmlHttpa.onreadystatechange = handleStateChangea;
    document.getElementById('select3').options.length = 0;
    var url = document.form1.select2.value;
    var qurl = "/regions.php?city="+url+"&time="+new Date().getTime();
    xmlHttpa.open("GET", qurl, true);
    xmlHttpa.send(null);
    //setTimeout("startRequest()",2000);
}

function handleStateChangea() {
    if(xmlHttpa.readyState == 4) {
        if(xmlHttpa.status == 200) {
         var obja = document.getElementById('select3');
            eval(xmlHttpa.responseText);  
        //将服务器返回的字符串写到页面中ID为select3的区域
            
        }
    }
}
数据岛 regions.php 页面代码

CODE:

[Copy to clipboard]


复制内容到剪贴板
代码:
<?php
require "common.php";
$city = $city ? $city : "";
$area = $area ? $area : "";
if($province && $city==''){
  global $db; $i = 1;
  
  $result = $db->query("SELECT DISTINCT city FROM ".TABLE_CITY." WHERE province='$province' ORDER BY cityid");
  while($r = $db->fetch_array($result))
    {
       $r[city]=iconv('gb2312','UTF-8',$r[city]);
echo "obj.options[obj.options.length] = new Option('".$r[city]."','".$r[city]."');\n";
$i++;
    }
  $resultarea = $db->query("SELECT DISTINCT city FROM ".TABLE_CITY." WHERE province='$province' ORDER BY cityid");
  $r = $db->fetch_array($resultarea);
  $city = $r[city];
  $resulta = $db->query("SELECT DISTINCT area FROM ".TABLE_CITY." WHERE city='$city' ORDER BY cityid");
   while($ra = $db->fetch_array($resulta))
    {
       $ra[area]=iconv('gb2312','UTF-8',$ra[area]);
echo "obja.options[obja.options.length] = new Option('".$ra[area]."','".$ra[area]."');\n";
$i++;
    }


}
if($city && $province==''){
   global $db; $i = 1;
  
   $result = $db->query("SELECT DISTINCT area FROM ".TABLE_CITY." WHERE city='$city' ORDER BY cityid");
   while($r = $db->fetch_array($result))
    {
       $r[area]=iconv('gb2312','UTF-8',$r[area]);
echo "obja.options[obja.options.length] = new Option('".$r[area]."','".$r[area]."');\n";
$i++;
    }
}
?>
地址信息数据库:

     采用的是phpcms3.0里自带的数据库,我没有进行任何改动

本程序可以在phpcms3.0里直接使用,若在其他地方使用请自己修改

有什么问题请咨询QQ:  805830

哪位朋友有精确到乡级的数据库共享下......



[ 本帖最后由 mlmm 于 2007-8-22 09:52 编辑 ]

作者: mlmm   发布时间: 2006-12-31

作者: Nickboy   发布时间: 2006-12-31

呵呵,不错啊

作者: leehui1983   发布时间: 2006-12-31

哪位朋友有精确到乡级的数据库共享下......:L 有没精确到村的啊

作者: laopi   发布时间: 2007-01-01


不错

作者: fengyun   发布时间: 2007-01-01

:D .........

作者: isno   发布时间: 2007-01-04

晕,不能做个独立的吗?要用PHPCMS?

作者: edisonwu   发布时间: 2007-01-09

能精确到镇都不错了

作者: zssupertim   发布时间: 2007-01-13

不错,支持

作者: yustar   发布时间: 2007-01-13


不错。支持一下!
楼主可否给我传份源码?

作者: 特蓝克斯   发布时间: 2007-01-15

貌似只能支持IE:L

作者: 编程骇客   发布时间: 2007-01-19

好东西

作者: jeromenie   发布时间: 2007-02-05

楼主可以整合dz发发帖页面作为发帖分类那样的必填项吗?

作者: squaly   发布时间: 2007-02-26

回来转转.........好久没来这里了

作者: mlmm   发布时间: 2007-08-08

JS

作者: caiyuerui   发布时间: 2007-08-15

不错.
请楼主 使用PHP CODE 标签来操作帖子里面的代码

这样我们看起来更加舒服点:)

作者: 逆雪寒   发布时间: 2007-08-21

复制内容到剪贴板
代码:
已经加了

作者: mlmm   发布时间: 2007-08-22

呵呵..来支持下...嘎嘎..

作者: yxqadr   发布时间: 2007-09-03

刚好现在用的上,自己写了一个貌似没这么爽。

作者: hotbone   发布时间: 2007-09-04

看看

作者: redcolt   发布时间: 2007-09-12

LZ你的头像怎么搞的?

作者: showphp   发布时间: 2007-09-12

论坛百变?

作者: showphp   发布时间: 2007-09-12

引用:
原帖由 showphp 于 2007-9-12 22:33 发表
论坛百变?

http://www.mlmm.cn/weather/Portrait.php?id=.gif
:lol :lol :lol

作者: mlmm   发布时间: 2007-09-12

:')

作者: yangyunlife   发布时间: 2007-09-13

php的死掉了

作者: yangyunlife   发布时间: 2007-09-13

作者: springparker   发布时间: 2008-02-01

先收藏了!!!!!!在研究!

作者: kth007   发布时间: 2008-03-12

fadfadfadfadfadfadf

作者: microskype   发布时间: 2008-06-17

就不能提供一个源码下载啊

作者: cybmm   发布时间: 2008-06-18

支持一下
这个数据库我也有,这个好像比较全的了。

[ 本帖最后由 adleyliu 于 2008-6-18 15:44 编辑 ]

作者: adleyliu   发布时间: 2008-06-18

热门下载

更多