Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用JQuery和bootstrap-select实现世界城市的三级联动(中英互译)

使用JQuery和bootstrap-select实现世界城市的三级联动(中英互译)

作者头像
用户6379025
发布于 2022-12-26 08:11:57
发布于 2022-12-26 08:11:57
3.4K40
代码可运行
举报
文章被收录于专栏:莫凡莫凡
运行总次数:0
代码可运行

使用JQuery和bootstrap-select实现世界城市的三级联动(中英互译)

我们公司是做外贸电商的,需要一个世界城市的三级联动,在网上找好久发现都没有合适的轮子,只能自己写一个

  1. 使用该轮子需要引用bootstrap-select
  2. 使用该轮子需要引用JQuery
  3. 使用该轮子需要引入世界城市的json数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  var worldcountry = Widget.extend({
    init: function () {
      this.total(this);
      window.language =
        $("#top_menu .btn-group .dropdown-toggle").text().trim().length === 2
          ? "name"
          : "name_en";
       
      this.getData(this);
      this.saveAddress();
      
    },

    getData: function (self) {
      $.ajax({
        url: "/purchase_plan_website/static/src/json/world.json",
        dataType:"json",
        success: function (res) {
          res = typeof res ==="object"?res:JSON.parse(res)
          // res=JSON.parse(res)
          self.initOption(self, res);
          self.addPlanAaddress()
        },
      });
    },
    /**
     * @description:初始世界城市的三级联动,使用事件委托绑定到各级事件,通过选择不同国家关联不同的城市和街道
     * @param:res
     *
     */

initOption: function (self, res) {
      var countryObj = self.selectCountry(res);
      var obj = self.selectProvince(countryObj.countryObj,countryObj.initSelectOCountry);
      self.selectCity(obj.provinceObj, obj.selectCity);
      self.provinceObj = obj.provinceObj;
      

      $(".plan_country_address").click(
        function (e) {
          if(e.target.tagName!=="A" && e.target.tagName!=="SPAN") return;
          var selectCountry = $(e.target).text();
          var obj = self.selectProvince(countryObj.countryObj, selectCountry);
          self.selectCity(obj.provinceObj, obj.selectCity);
          self.provinceObj = obj.provinceObj;
          //改变地址的值
          var stree=$(".plan_street_address_box button[type=button]").text()
          $(".plan_user_info .form-control").val(`${selectCountry}/${obj.selectCity}/${stree}`)
         
        }
      );
      $(".plan_state_address_box").click(function (e) {
        if(e.target.tagName!=="A" && e.target.tagName!=="SPAN") return;
        var selectCity = $(e.target).text();
        self.selectCity(self.provinceObj, selectCity);
        var stree=$(".plan_street_address_box button[type=button]").text();
        var country=$(".plan_country_address button[type=button]").text()
        $(".plan_user_info .form-control").val(`${country}/${selectCity}/${stree}`)
      });

      $(".plan_street_address_box").click(function (e) {
        if(e.target.tagName!=="A" && e.target.tagName!=="SPAN") return;
        var stree = $(e.target).text();
        var province=$(".plan_state_address_box button[type=button]").text();
        var country=$(".plan_country_address button[type=button]").text()
        $(".plan_user_info .form-control").val(`${country}/${province}/${stree}`)
      });
    },
    /**
     * @description :选择国家时候
     * @param res :全世界国家城市数据
     */
    selectCountry: function (res) {
      var countryStr = "";
      var countryObj = {};
      var initSelectOCountry;
      for (var i = 0; i < res.length; i++) {
        for (var j = 0; j < res[i].childrens.length; j++) {

          var country = res[i].childrens[j];
          countryStr += `<option>
                    ${country[language]}
                </option>`;
          countryObj[country[language]] = country.childrens;
          if(i===0&&j===0){
            initSelectOCountry=country[language]
          }
        }
      }
      $(".plan_country_address").append(countryStr);
      $(".selectpicker.plan_country_address").selectpicker("refresh");
   
      return {countryObj,initSelectOCountry};
    },
    /**
     * 
     * @param {*} countryObj 所有国家
     * @param {*} selectCountry 选择国家的城市
     * @returns { provinceObj, selectCity } 所有省份 当前选择的省份
     */
    selectProvince: function (countryObj, selectCountry) {
      $(".plan_state_address_box")
        .html(`
        <h3>State</h3>
        <select class="selectpicker plan_state_address" data-live-search="true">                                        
      </select>
      `);
      
      var initCountryValue = selectCountry 
      var province = countryObj[initCountryValue];
      var provinceStr = "";
      var provinceObj = {};
      var selectCity;
      if(province.length<=0){
        $(".plan_state_address_box").css("display","none")
        return {};
      }
      $(".plan_state_address_box").css("display","block")
      for (var k = 0; k < province.length; k++) {
        provinceStr += `<option>${province[k][language]}</option>`;
        provinceObj[province[k][language]] = province[k].childrens;
        if (k === 0) {
          selectCity = province[k][language];
        }
      }

      $(".plan_state_address").append(provinceStr);
      $(".selectpicker.plan_state_address").selectpicker("refresh");


      return { provinceObj, selectCity };
    },
    /**
     * 
     * @param {*} provinceObj  所有省份
     * @param {*} selectCity   选择的省份
     * @returns null
     */
    selectCity: function (provinceObj, selectCity) {
      $(".plan_street_address_box")
        .html(`
        <h3>City/Street</h3>
        <select class="selectpicker plan_street_address" data-live-search="true">                                        
        </select>`);
      var initProvinceValue = selectCity 
      var city = provinceObj[initProvinceValue];
      if (city === undefined || city.length === 0) {
        $(".plan_street_address_box").css("display","none")
        return;
      }
      $(".plan_street_address_box").css("display","block")
      var cityStr = "";
      for (var l = 0; l < city.length; l++) {
        cityStr += `<option>${city[l][language]}</option>`;
      }
      $(".plan_street_address").append(cityStr);
      $(".selectpicker.plan_street_address").selectpicker("refresh");
    },
  });
具体效果

世界城市json文件

需要可以留下邮箱私发,因为文章不好上传文件 我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite _code=3vtuwevgbfms4

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
4 条评论
热度
最新
xmlweb@hotmail.com 多谢分享
xmlweb@hotmail.com 多谢分享
回复回复点赞举报
大佬,分享下城市json,多谢多谢。 catking@163.com
大佬,分享下城市json,多谢多谢。 catking@163.com
回复回复点赞举报
老师,麻烦分享一下,谢谢~ 邮箱:siveyun363@sina.com
老师,麻烦分享一下,谢谢~ 邮箱:siveyun363@sina.com
回复回复点赞举报
老师儿,麻烦给份世界城市json文件,谢谢~ 邮箱:gzwaaa123@163.com
老师儿,麻烦给份世界城市json文件,谢谢~ 邮箱:gzwaaa123@163.com
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
城市三级联动查询
很多实现三级联动查询的方式是通过数据库的方式查询的,但是有时候我们查询的不一定是城市三级联动,有可能是其他的三级联动查询,那么数据库的修改就成了大问题。今天我来给大家介绍一种无刷新的js实现三级联动查询方法,例子就是城市的三级联动。我们先看一下主页html代码:
OECOM
2020/07/02
3.2K0
django admin后台的新增页面,修改页面,实现城市的三级联动,需要修改源码(有代码)
在django的admin后台的新增页面和修改页面,实现三级联动,就是你选择一个省份,下面的城市就是这个省份的,选择不同的省份,下面就是不同的城市,实现这种联动
一写代码就开心
2022/06/05
1.3K0
django admin后台的新增页面,修改页面,实现城市的三级联动,需要修改源码(有代码)
小程序的三级联动
项目中经常遇到要选择城市。用到三级联动的方式 微信小程序的 picker 组件 mode=date 是三级联动的,但是无法自定义,这让我们心痛不已,值得我们欣慰的 picker-view 组件是可以自
云扬四海
2019/06/05
4.8K0
小程序的三级联动
第117天:Ajax实现省市区三级联动
(3)封装回调函数,回调函数success中用$.each循环每一条数据,动态创建option,并将数据添加到option中
半指温柔乐
2018/09/11
2K0
第117天:Ajax实现省市区三级联动
Django Admin实现三级联动(省市区)
找到django源码中的change_form.html(django/contrib/admin/templates/admin/)文件,复制到app下templates目录中. 在admin中指定自定义的模板文件change_form_template = 'area.html'
菲宇
2022/12/21
2K0
Django Admin实现三级联动(省市区)
地址管理之省市区三级联动菜单
地址管理之省市区三级联动菜单 三级联动表单 导入省市区的数据 下载sql语句的文件 在数据库中执行:source 文件路径即可导入 导入成功之后,在数据库中会出现三张表,分别代表省,市,区 创建实体类
爱撒谎的男孩
2018/05/25
4.2K1
layui省市区三级联动插件
这个是一个layui省市区三级联动插件,近来使用layui后台模板框架开发后台系统,要用到省市县/区三级联动,本想从网上找个现成的轮子,然没有自己想要的需求,就自己造了个。
孤烟
2020/09/27
4.1K0
省市县三级联动
上次找到地区编码后,就测试省市县。网上找到例子感觉不是很合适,然后修改了下。 本来是从自己数据库查询,但做测试的话,在网上找到了一个地区编码的api,然后就是跨域问题。原来用ajax访问失败,getJSON可以,但getJson有同步问题,设置了全局参数也不管用,只好重复使用了。 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Insert title here</title> 6 <scri
Ryan-Miao
2018/03/13
2.9K0
servlet+jsp/js二种实现方式:三级联动(附加demo代码)
V_1.0 准备工作: #1.创建表 [城市信息表] [行政区信息表] create table city( cid int, cname varchar(200), pid int ); create table qu( qid int, qname varchar(200), cid int ); 2.制造测试数据 insert into city values(1,"北京市",
挑战者
2018/06/29
2.9K0
Ajax 案例之三级联动
  每次在博客园网站写博客,格式真的好难搞,还望好心人告知更好的编辑工具。接下来进入正题:三级联动(其效果演示可看我的博文 Ajax 学习总结 末尾)。 1. 数据表设计(Oracle) 新建数
bgZyy
2018/05/16
3K0
小程序php:省市区三级联动
https://download.csdn.net/download/TiaoZhanJi_Xian/20087538
黄啊码
2021/09/26
2.4K0
X-admin框架中change事件失效如何实现省市区三级联动
Uncaught TypeError: layui.form is not a function的错误
meihuasheng
2021/03/18
6050
基于jQuery的AJAX实现三级联动菜单
最近学习jQuery,所以就写了一个关于中国省市县/区的三级联动菜单,权当相互学习,相互促进,特此记录。
于果
2021/08/25
6.6K0
vue select二级城市联动及第二级默认选中第一个option值
当二级联动比如选择国家的时候,希望选中一个国家的时候后面城市默认选中第一个城市,则给国家的select加一个@change事件就可以了 <div class="inputLine"> <span>所在区域</span> <select name="" v-model="countryName" @change="selectCountry"> <option :value="item" v-for="(item,index) in area"
蓓蕾心晴
2018/04/12
3.3K0
vue select二级城市联动及第二级默认选中第一个option值
两、三级联动菜单,简单的实现(2)
在上一篇文章中两个联动菜单,简单的实现我写了一个插件,但是只支持两个链接,完好下支持二 、三级联动
全栈程序员站长
2022/07/06
2.1K0
js多级联动示例(省份和城市二级联动)
本文描述的省份和城市二级联动下拉菜单,在js部分设置省份和城市信息,当然也可以将数据保存在数据库中,当需要使用的时候在读取。这里用的是js原生代码 在html文件中设置省份、城市下拉列表如下: <select id="pro" onchange="addCity();"></select> <select id="city"></select> 在js中设置省份信息代码如下: var province=["北京","上海","广东","江苏","浙江","重庆","安徽","福建","甘肃","广西", "
lonelydawn
2018/02/09
9.7K0
[jQuery学习系列六]6-jQuery实际操作小案例
前言 最后在这里po上jQuery的几个小案例. Jquery例子1_占位符使用 需求: 点击第一个按钮后 自动去check 后面是否有按钮没有选中, 如有则提示错误消息. <html> <head> <script type="text/javascript"> function check() { String.prototype.format = function(){ var args = arguments; return this.repl
一枝花算不算浪漫
2018/05/18
9880
利用JS实现一个简单的二级联动菜单
前几天在看js的相关内容,所以就简单写了一个二级联动菜单。分享一下。 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>JS实现二级联动菜单</title> 6 </head> 7 <body> 8 <form name="form1" method="post" action=""> 9 省份:<select name="province"
于果
2021/08/25
3.3K0
[jQuery学习系列三 ]3-JQuery学习二-字典操作
前言: 如果看过了第一篇和第二篇, 相信大家会对jQuery有个初步的认识了, 对于jQuery的选择器和数组的操作都已经很熟悉了, 这一篇就单独罗列jQuery中字典的操作相关的内容. 1. 数组中添加map var arr = []; var key = 'Jeremy'; var value = '!!!!' arr.push({ 'key': key, 'value': value, }); document.write("key: " + arr[0]['key'] + "<br
一枝花算不算浪漫
2018/05/18
1.1K0
Ajax 技术学习(JavaEE)—— 实现二级下拉联动
我们在购买快递选择收获地址的时候,选择地域一般都是现选择省,省选择完毕后,电脑会自动显示该省对应的城市,我们选择了城市之后,系统会显示该城市所对应的的区域。
Gorit
2021/12/09
2.2K0
Ajax 技术学习(JavaEE)—— 实现二级下拉联动
相关推荐
城市三级联动查询
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档