jquery+ajax实现省市区三级联动(封装和不封装两种方式)

jquery+ajax实现省市区三级联动

前言

省市区三级联动是Web开发中常用的功能之一,通过该功能可以帮助用户快速选择所在地区。本文主要介绍如何使用jquery和ajax实现省市区三级联动的功能,包括封装和不封装两种方式。

准备工作

在开始编写代码之前,我们需要先了解一下使用该功能需要准备哪些文件。

  • jQuery库:用于编写JS代码实现逻辑
  • JSON数据文件:用于存储省市区数据
  • HTML文件:用于展示页面和调用JS代码
  • JS文件:用于编写JS代码

实现方式一:不封装

1.编写HTML

在HTML文件中定义三个下拉框,分别用于展示省、市、区的信息。

<select id="province"></select>
<select id="city"></select>
<select id="district"></select>

2.编写JS代码

在JS文件中编写JS代码实现省市区三级联动的功能。具体实现步骤如下:

2.1 获取JSON数据

使用ajax方式获取JSON数据。

$.ajax({
    url: '/data.json',
    type: 'GET',
    dataType: 'json',
    success: function(data) {
        //TODO: 解析JSON数据
    }
});

2.2 解析JSON数据

将获取到的JSON数据解析成数组,方便后续操作。

var province = new Array();
for (var i in data) {
    if (data[i].parentId == 0) {
        province.push(data[i]);
    }
}

2.3 绑定省下拉框

将获取到的省信息绑定到省下拉框中。

for (var i in province) {
    $('#province').append('<option value="' + province[i].id + '">' + province[i].name + '</option>');
}

2.4 绑定市下拉框

当省下拉框选择了某一项时,将该省的市信息绑定到市下拉框中。

$('#province').change(function() {
    $('#city').empty();
    $('#city').append('<option value="-1">--请选择--</option>');
    $('#district').empty();
    $('#district').append('<option value="-1">--请选择--</option>');
    var provinceId = $(this).val();
    var city = new Array();
    for (var i in data) {
        if (data[i].parentId == provinceId) {
            city.push(data[i]);
        }
    }
    for (var i in city) {
        $('#city').append('<option value="' + city[i].id + '">' + city[i].name + '</option>');
    }
});

2.5 绑定区下拉框

当市下拉框选择了某一项时,将该市的区信息绑定到区下拉框中。

$('#city').change(function() {
    $('#district').empty();
    $('#district').append('<option value="-1">--请选择--</option>');
    var cityId = $(this).val();
    var district = new Array();
    for (var i in data) {
        if (data[i].parentId == cityId) {
            district.push(data[i]);
        }
    }
    for (var i in district) {
        $('#district').append('<option value="' + district[i].id + '">' + district[i].name + '</option>');
    }
});

3.展示效果

将编写好的HTML和JS文件放到Web服务器中,即可在浏览器中打开该页面,展示三级联动效果。

实现方式二:封装

在实现方式一中,代码逻辑比较繁琐,需要编写多个事件监听器和循环语句,不利于代码的维护。因此,我们可以将这些代码封装成一个简单易用的插件,方便开发者调用。

1.编写HTML

与实现方式一中的HTML代码一致。

2.编写JS代码

在JS文件中编写如下代码:

(function($) {
    $.fn.citySelect = function() {
        var data;
        var xmlHttp = new XMLHttpRequest();
        xmlHttp.open("GET", "/data.json", false);//同步方式获取JSON数据
        xmlHttp.send(null);
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
            data = JSON.parse(xmlHttp.responseText);
        }

        var province = new Array();
        for (var i in data) {
            if (data[i].parentId == 0) {
                province.push(data[i]);
            }
        }

        var $province = $(this).find('#province');
        var $city = $(this).find('#city');
        var $district = $(this).find('#district');

        $province.empty();
        $province.append('<option value="-1">--请选择--</option>');
        for (var i in province) {
            $province.append('<option value="' + province[i].id + '">' + province[i].name + '</option>');
        }

        function bindCity(provinceId) {
            $city.empty();
            $city.append('<option value="-1">--请选择--</option>');
            $district.empty();
            $district.append('<option value="-1">--请选择--</option>');
            var city = new Array();
            for (var i in data) {
                if (data[i].parentId == provinceId) {
                    city.push(data[i]);
                }
            }
            for (var i in city) {
                $city.append('<option value="' + city[i].id + '">' + city[i].name + '</option>');
            }
        }

        function bindDistrict(cityId) {
            $district.empty();
            $district.append('<option value="-1">--请选择--</option>');
            var district = new Array();
            for (var i in data) {
                if (data[i].parentId == cityId) {
                    district.push(data[i]);
                }
            }
            for (var i in district) {
                $district.append('<option value="' + district[i].id + '">' + district[i].name + '</option>');
            }
        }

        $province.change(function() {
            var provinceId = $(this).val();
            if (provinceId != -1) {
                bindCity(provinceId);
            }
        });

        $city.change(function() {
            var cityId = $(this).val();
            if (cityId != -1) {
                bindDistrict(cityId);
            }
        });
    }
})(jQuery);

3.展示效果

在HTML文件中引入jquery和上述封装好的JS文件,然后在javascript中调用这个插件。

<html>
<head>
    <title>省市区三级联动</title>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
    <script src="/citySelect.js"></script>
    <script type="text/javascript">
        $(function() {
            $('#select').citySelect();
        });
    </script>
</head>
<body>
<div id="select">
    <select id="province"></select>
    <select id="city"></select>
    <select id="district"></select>
</div>
</body>
</html>

运行该HTML文件后,在浏览器中即可展示省市区三级联动的效果。

总结

通过本文介绍的两种不同实现方式,我们可以发现使用封装的方式可以更加简化代码,并且便于维护。而对于不封装的方式,虽然代码的逻辑比较繁琐,但是依然是实现三级联动的可行方案。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jquery+ajax实现省市区三级联动(封装和不封装两种方式) - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQuery实现图片加载完成后改变图片大小的方法

    针对“jQuery实现图片加载完成后改变图片大小的方法”的问题,我可以提供以下完整攻略: 1. 使用jQuery的load()方法 如果需要在图片加载完成后触发图片大小的改变事件,可以使用jQuery的load()方法来实现。具体步骤如下: 1.1 在HTML文件中插入图片 在HTML文件中插入需要加载的图片,一般情况下可以使用img标签来引用图片,如下所示…

    jquery 2023年5月28日
    00
  • 如何使用jQuery Mobile制作减号图标

    以下是使用jQuery Mobile制作减号图标的完整攻略: 首先,需要在HTML文件中引入jQuery Mobile库。可以通过以下代码实现: <head> <meta charset="utf-8"> <meta name="viewport" content="width=…

    jquery 2023年5月11日
    00
  • jquery将信息遍历到界面上实例代码

    下面是详细讲解jquery将信息遍历到界面上的完整攻略: 准备工作 在运用jquery将信息遍历到界面上之前,需要做一些准备工作,以确保代码的顺利运行。 引入jquery库文件 jquery是一款常用的js库,我们需要先在代码中引用jquery的库文件,才能在代码中使用它的相关功能。一般来说,我们可以在head标签中添加如下代码: <script sr…

    jquery 2023年5月28日
    00
  • jQuery实现常见的隐藏与展示列表效果示例

    下面我将为您详细讲解jQuery实现常见的隐藏与展示列表效果的攻略。 1.准备工作首先,要使用jQuery的话,我们需要先引入jQuery库文件。在HTML文件中通过script标签引入,如下: <script src="https://cdn.bootcss.com/jquery/3.4.0/jquery.min.js">&…

    jquery 2023年5月28日
    00
  • Jquery 的扩展方法总结

    Jquery 的扩展方法总结 Jquery 的扩展方法可以为 Jquery 增加工具类方法或接口,便于开发者在开发网页时更加便捷、高效。下面的内容将对 Jquery 的扩展方法进行总结,并通过两个实例加深理解。 Jquery 扩展方法的定义 Jquery 扩展方法采用 Jquery.fn.XXX 的形式进行定义,其中 XXX 为自定义的方法名称。下面是一个简…

    jquery 2023年5月19日
    00
  • jQuery判断数组是否包含了指定的元素

    要判断一个数组是否包含一个指定元素,可以使用JavaScript的Array.prototype.indexOf方法。但是,如果想要使用jQuery来实现判断,也可以使用$.inArray()方法。 这个方法的返回值是元素在数组中的下标,如果没有找到则返回-1。下面是示例代码: var arr = [1,2,3,4,5]; var element = 3; …

    jquery 2023年5月28日
    00
  • JQuery datepicker 使用方法

    JQuery datepicker 是一个十分常用的日期选择器插件,可以帮助我们快速开发出属于自己的日期选择器功能。下面是根据官方文档和个人实践总结的使用方法攻略: 一、引入JQuery 和 datepicker插件文件 <head> <link rel="stylesheet" href="//code.jq…

    jquery 2023年5月28日
    00
  • jQWidgets jqxDataTable pageChanged事件

    以下是关于“jQWidgets jqxDataTable pageChanged事件”的完整攻略,包含两个示例说明: 简介 jqxDataTable 控件的 pageChanged事件分页时触发,可以用于处理分页后的逻辑。 整攻略 以下 jqxDataTable 控件 pageChanged事件的完整攻略: 定义 pageChanged 事件 在 jqxDa…

    jquery 2023年5月11日
    00
合作推广
合作推广
分享本页
返回顶部