ajax 下拉列表三级联动

                                            

如上图效果 ,通过ajax从数据库传输出地域信息,需要用的chinastates数据表如下图所示:

具体是代码如下:

<script src="../crud/bootstrap/js/jquery-1.11.2.min.js"></script>
<script src="diqu.js"></script>
</head>

<body>

<div id="diqu"></div>

</body>

diqu.js:

// JavaScript Document
$(document).ready(function(e) {
    
    //往ID为diqu的DIV扔三个下拉
    $("#diqu").html("<select id='sheng'></select><select id='shi'></select><select id='qu'></select>");
    
    //往省份的下拉里面填充数据
    LoadSheng();
    //加载市
    LoadShi();
    //加载区
    LoadQu();
    
    //给省的下拉加变的事件
    $("#sheng").change(function(){
        //加载市
        LoadShi();
        //加载区
        LoadQu();
    })
    //给市的下拉加变的事件
    $("#shi").change(function(){
        //加载区
        LoadQu();
    })
    
});

//加载省的方法
function LoadSheng(){
    var pcode = "0001"; //父级代号
    $.ajax({
        async:false,
        url:"load.php",
        data:{pcode:pcode},
        type:"POST",
        dataType:"TEXT",
        success: function(data){
            var str = "";
            var hang = data.split("|");
            for(var i=0;i<hang.length;i++){
                var lie = hang[i].split("^");
                str += "<option value='"+lie[0]+"'>"+lie[1]+"</option>";
            }
            $("#sheng").html(str);
        }
    });
}

//加载市的方法
function LoadShi(){
    var pcode = $("#sheng").val(); //父级代号
    $.ajax({
        async:false,
        url:"load.php",
        data:{pcode:pcode},
        type:"POST",
        dataType:"TEXT",
        success: function(data){
            var str = "";
            var hang = data.split("|");
            for(var i=0;i<hang.length;i++){
                var lie = hang[i].split("^");
                str += "<option value='"+lie[0]+"'>"+lie[1]+"</option>";
            }
            $("#shi").html(str);
        }
    });
}

//加载区的方法
function LoadQu(){
    var pcode = $("#shi").val(); //父级代号
    $.ajax({
     async:false,  url:
"load.php", data:{pcode:pcode}, type:"POST", dataType:"TEXT", success: function(data){ var str = ""; var hang = data.split("|"); for(var i=0;i<hang.length;i++){ var lie = hang[i].split("^"); str += "<option value='"+lie[0]+"'>"+lie[1]+"</option>"; } $("#qu").html(str); } }); }

diqu.js总结:

要点:1.给省 市添加change事件,内容改变时,重新加载下级下拉列表的选项

$("#sheng").change(function(){
        //加载市
        LoadShi();
        //加载区
        LoadQu();
    })
    //给市的下拉加变的事件
    $("#shi").change(function(){
        //加载区
        LoadQu();
    })
    
});
2.为了返回数据方便,我们把查询的地名用 代号^地名|代号^地名|代号^地名 的形式拼接起来的,所以要把返回的数据进行拆分
var hang = data.split("|"); 
var lie = hang[i].split("^");
 

 load.php:

<?php
require_once "../crud/DBDA.class.php";
$db = new DBDA();
$pcode = $_POST["pcode"];
$sql = "select * from chinastates where parentareacode='{$pcode}'";
echo $db->strquery($sql);

DBDA.class.php:

<?php
class DBDA{
    public $host="localhost"; //服务器地址
    public $uid="root"; //用户名
    public $pwd="123"; //密码
    public $dbname="weibo"; //数据库名称    
    /*
        执行一条SQL语句的方法
        @param sql 要执行的SQL语句
        @param type SQL语句的类型,0代表查询 1代表增删改
        @return 如果是查询语句返回二维数组,如果是增删改返回true或false
    */
    public function query($sql,$type=0){
        $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname);
        $result = $db->query($sql);
        if($type){
            return $result;
        }else{
            return $result->fetch_all();
        }
    }
    //返回字符串的方法
    public function strquery($sql,$type=0){
        $db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname);
        $result = $db->query($sql);
        if($type){
            return $result;
        }else{
            //return $result->fetch_all();
            $arr = $result->fetch_all();
            $str = "";
            foreach($arr as $v){
                $str .= implode("^",$v)."|";
                }
            $str = substr($str,0,strlen($str)-1);
            return $str;
        } 
        }
原文地址:https://www.cnblogs.com/rose1324/p/8514389.html