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 delay()方法

    下面就让我来为你详细讲解“jQuery delay()方法”的完整攻略。 jQuery delay()方法详解 delay() 方法是 jQuery 的一个实用方法,它可以让我们设置一个时间延迟来实现动画效果的延迟执行。下面就让我们来看一下该方法的详细说明。 delay()方法语法 delay() 方法的语法如下所示: .delay( duration [,…

    jquery 2023年5月12日
    00
  • jQWidgets jqxListBox uncheckItem()方法

    jQWidgets jqxListBox uncheckItem()方法详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件工具包。ListBox是其中之一。本文将详细介绍jqListBox的uncheckItem()方法,包括定义、语法和示例。 uncheckItem()方法的定义 jqxListBox的checkItem()方法…

    jquery 2023年5月10日
    00
  • WebSocket实现聊天室业务

    使用WebSocket技术实现聊天室业务可以分为以下几个步骤: 1. 了解WebSocket WebSocket是一种应用层协议,用于在Web浏览器和服务器之间进行双向数据传输。与HTTP协议不同,WebSocket协议是建立在TCP协议之上的,可以实现长连接,不需要每次请求都建立新的连接。WebSocket协议在2011年被发布为国际标准,支持桌面浏览器和…

    jquery 2023年5月29日
    00
  • jQuery中on()方法用法实例

    下面是关于“jQuery中on()方法用法实例”的详细攻略: 一、什么是on()方法 on()是jquery中的一个事件绑定方法,同时它也是jquery推荐使用的事件绑定方式。通过on()方法可以实现对目标元素的多个事件进行绑定,并且可以动态绑定事件,该方法支持链式调用,使用方便。 二、on()方法的语法格式 on()方法的基本语法如下: $(selecto…

    jquery 2023年5月27日
    00
  • jquery中push()的用法(数组添加元素)

    当我们在使用jQuery的时候,经常要处理数组类型的数据,添加元素是一个常见的操作。jQuery中提供了push()方法用于向数组中添加元素。下面详细讲解一下push()的使用方法。 push()方法的语法 push()方法用于向数组的末尾添加元素,语法如下: array.push(element1, element2, …, elementN) 其中:…

    jquery 2023年5月28日
    00
  • jQuery Mobile面板 classes.contentFIxedToolbarClosed选项

    jQuery Mobile是一款基于jQuery的前端框架,专注于优化移动端网站体验。其中面板(panel)是一种常用于移动端界面的交互组件,可以实现侧边栏菜单、消息提示等功能。在面板中,有一个名为contentFixedToolbarClosed的选项,本文将详细讲解其作用及用法。 什么是contentFixedToolbarClosed选项 conten…

    jquery 2023年5月12日
    00
  • Jquery操作cookie记住用户名

    下面是详细讲解“Jquery操作cookie记住用户名”的完整攻略。 1. 什么是cookie? Cookie是存储在浏览器中的小文本文件,用于存储有关用户的信息。当用户访问网站时,服务器可以读取Cookie中的信息,以提供更个性化的体验。 2. Jquery操作cookie Jquery有一个专门的插件——jquery.cookie.js,它用于在浏览器中…

    jquery 2023年5月27日
    00
  • jQuery deferred .promise()方法

    jQuery deferred .promise()方法 jQuery的deferred.promise()方法用于将deferred对象转换为一个promise对象,以便在异步操作执行过程中,对其进行更加精细的控制。本文将详细介绍deferred.promise()方法的语法和用法,并提供两个示例说明。 语法 以下是deferred.promise()方法…

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