jQuery ajax 实现下拉框 二级联动

本文演示了如何利用jQuery AJAX实现下拉框的二级联动效果。当用户在一级下拉框中选择省份时,通过AJAX异步请求获取对应的二级城市数据,并动态填充到二级下拉框中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先 默认显示一级下拉框内容 我这边是tp5 的模板

1.Ajax的异步 到后台 读取 和一级下拉框 对应的数据 然后 return json  数据 

2.json  数据   前台 用eval 函数 转换成 对象

3. 用循环 把要的数据 通过jQuery 追加到 二级下拉框里面


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>添加文章</title>
<link rel="stylesheet" type="text/css" href="/static/homeback/css/adminlist.css" />
<meta name="description" content="Dashboard">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!--Basic Styles-->
</head>
<body>
选择文章分类:

<select id="province">
<option>请选择</option>
 {volist name="data" id="vo"}
  <option value ="{$vo.id}">{$vo.navName}</option>
  {/volist}
  </select>
  <select id="city">
    <option>请选择</option>
  </select>
  <script type="text/javascript" src="/static/homeback/js/jquery-1.12.4.min.js"></script>
  <script type="text/javascript">
    /*
     * 需要思考哪些事情?
     * * 在什么时候执行Ajax的异步请求?
     *   * 当用户选择具体的省份信息时
     */
    // 1. 为id为province元素绑定onchange事件
    var provinceEle = document.getElementById("province");
    provinceEle.onchange = function(){
        // 清空
        var city = document.getElementById("city");
        var opts = city.getElementsByTagName("option");
        for(var z=opts.length-1;z>0;z--){
            city.removeChild(opts[z]);
        }
        
        if(provinceEle.value != "请选择"){
            // 2. 执行Ajax异步请求
            var xhr = getXhr();
            xhr.open("post","{:url('article/test')}");
            xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xhr.send("province="+provinceEle.value);
            xhr.onreadystatechange = function(){
                if(xhr.readyState==4&&xhr.status==200){
                    // 接收服务器端的数据内容
                    var obj;
                    var data = xhr.responseText;
                    var obj  = eval(data);//成功以后调用eval方法将数组还原成js数组对象
                    for( var i = 0;i<obj.length;i++){
                        $("#city").append('<option value="' + obj[i]['id'] + '">' + obj[i]['navName'] + '</option>');
                        //$("#city").html("<option value='"+data[i][areaid]+"'>"+data[i][areaname]+"</option>")
                        alert(obj[i]['navName']);
                    }
                    //var cities = data;
                    // data是字符串,转换为数组
                    //var cities = data.split(",");
                    //for(var i=0;i<cities.length;i++){
                    //    var option = document.createElement("option");
                    //    var textNode = document.createTextNode(cities[i]);
                    //    option.appendChild(textNode);
                    //    city.appendChild(option);
                    //}
                }
            }
        }
        
    };
    // 定义获取ajax核心对象的函数XMLHttpRequest对象的函数
    function getXhr(){
        var xhr = null;
        if(window.XMLHttpRequest){
            xhr = new XMLHttpRequest();
        }else{
            xhr = new ActiveXObject("Microsoft.XMLHttp");
        }
        return xhr;
    }
  </script>
</body>
</html>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值