资讯专栏INFORMATION COLUMN

JSON 加载 Select 多级联动

shiweifu / 2115人阅读

摘要:项目中正好遇到这个问题,需要将几组东南亚国家的地址数据解析到下拉列表里面去,原本以为三级联动的,看下数据发现数据格式并不是一样的,有两级的三级的还有四级的,所以我这边最高定的是四级联动,可以扩展多级联动。

项目中正好遇到这个问题,需要将几组东南亚国家的地址JSON数据解析到下拉列表里面去,原本以为三级联动的,看下数据发现数据格式并不是一样的,有两级的三级的还有四级的,所以我这边最高定的是四级联动,可以扩展多级联动。

JSON格式
  MY: ["http://116.62.170.10:9001/static/json/en-MY.min.json"], // 马来西亚
  PH: ["http://116.62.170.10:9001/static/json/en-PH.min.json"], // 菲律宾
  ID: ["http://116.62.170.10:9001/static/json/in-ID.min.json"], // 印度尼西亚
  TH: ["http://116.62.170.10:9001/static/json/th-TH.min.json"], // 泰国
  VN: ["http://116.62.170.10:9001/static/json/vi-VN.min.json"] // 越南
HTML
JavaScript
$(function(){
  LoadAjaxJsonSelect()
  
  function LoadAjaxJsonSelect () {
    var $temp= $("#temp")
    var selectids = ["select1", "select2", "select3", "select4"]
    for (var i = 0; i < selectids.length; i++) {
      var select = document.createElement("select")
      select.id = selectids[i]
      select.name = selectids[i]
      select.className = "selectpicker"
      $temp.parent().append(select)
    }

    var $select1 = $("#select1")
    var $select2 = $("#select2")
    var $select3 = $("#select3")
    var $select4 = $("#select4")

    $select2.hide()
    $select3.hide()
    $select4.hide()

    $.ajax({
      url: MY,
      type: "get",
      dataType: "json",
      data: {},
      success: function (data) {
        console.log(data)
        var html = [""]
        for (var p in data) {
          html.push("")
        }
        // level1
        var level1str, level2str, level3str
        $select1.empty().append(html.join("")).change(function () {
          $temp.val(this.value)
          level1str = this.value
          $select4.hide()
          $select3.hide()
          $select2.show()
          var html = [""]
          // 数据类型处理 (每个json数据格式不同)
          if (data[level1str] instanceof Array) {
            $.each(data[level1str], function (index, value) {
              html.push("")
            })
          } else {
            for (var l2 in data[this.value]) {
              html.push("")
            }
          }
          // level2
          $select2.empty().append(html.join("")).change(function () {
            $temp.val(this.value)
            level2str = this.value
            $select4.hide()
            $select3.show()
            var html = [""]
            if (data[level1str][level2str] instanceof Array) {
              $.each(data[level1str][level2str], function (index, value) {
                html.push("")
              })
            } else {
              for (var l3 in data[level1str][level2str]) {
                html.push("")
              }
            }
            // level3
            $select3.empty().append(html.join("")).change(function () {
              $temp.val(this.value)
              level3str = this.value
              $select4.show()
              var html = [""]
              if (data[level1str][level2str][level3str] instanceof Array) {
                $.each(data[level1str][level2str][level3str], function (index, value) {
                  html.push("")
                })
              } else {
                for (var l4 in data[level1str][level2str][level3str]) {
                  html.push("")
                }
              }
              // level4
              $select4.empty().append(html.join("")).change(function () {
                $temp.val(this.value)
              })
              if ($select4.get(0).options.length <= 1) {
                $select4.hide()
                return false
              }
            })
            if ($select3.get(0).options.length <= 1) {
              $select3.hide()
              return false
            }
          })
          if ($select2.get(0).options.length <= 1) {
            $select2.hide()
            return false
          }
        })
      }
    })
  }
})
Preview

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/97900.html

相关文章

  • fsLayui联动下拉框使用(下拉框异步加载数据)

    摘要:联动下拉框可以满足省市区级联或者多级级联异步加载数据操作。演示地址特殊说明联动下拉框依赖数据字典,必须在后面引入数据字典文件数据字典使用说明联动下拉框配置联动下拉框主要在中配置特定的标签,达到联动效果。 联动下拉框可以满足省市区级联或者多级级联异步加载数据操作。演示地址:http://fslayui.itcto.cn 特殊说明 联动下拉框依赖数据字典,必须在layui.js 后面引入...

    RayKr 评论0 收藏0
  • fsLayui联动下拉框使用(下拉框异步加载数据)

    摘要:联动下拉框可以满足省市区级联或者多级级联异步加载数据操作。演示地址特殊说明联动下拉框依赖数据字典,必须在后面引入数据字典文件数据字典使用说明联动下拉框配置联动下拉框主要在中配置特定的标签,达到联动效果。 联动下拉框可以满足省市区级联或者多级级联异步加载数据操作。演示地址:http://fslayui.itcto.cn 特殊说明 联动下拉框依赖数据字典,必须在layui.js 后面引入...

    Rindia 评论0 收藏0
  • 如何造一个移动端的联动选择器(一)

    摘要:写在前面之前写了一篇为移动端而生的自定义多级联动选择器,得到了很多人的关注。预知后话地址为移动端而生的自定义多级联动选择器到此,需求已经明确。 写在前面 之前写了一篇 MultiPicker -『为移动端而生』的自定义多级联动选择器,得到了很多人的关注。鉴于很多人对这种手写插件的过程很好奇,所以写了几篇文章,来说说它的成长史~ 在阅读本文之前,确保你有稍微看过 MultiPicker ...

    Steve_Wang_ 评论0 收藏0
  • 如何造一个移动端的联动选择器(一)

    摘要:写在前面之前写了一篇为移动端而生的自定义多级联动选择器,得到了很多人的关注。预知后话地址为移动端而生的自定义多级联动选择器到此,需求已经明确。 写在前面 之前写了一篇 MultiPicker -『为移动端而生』的自定义多级联动选择器,得到了很多人的关注。鉴于很多人对这种手写插件的过程很好奇,所以写了几篇文章,来说说它的成长史~ 在阅读本文之前,确保你有稍微看过 MultiPicker ...

    andycall 评论0 收藏0
  • 如何造一个移动端的联动选择器(一)

    摘要:写在前面之前写了一篇为移动端而生的自定义多级联动选择器,得到了很多人的关注。预知后话地址为移动端而生的自定义多级联动选择器到此,需求已经明确。 写在前面 之前写了一篇 MultiPicker -『为移动端而生』的自定义多级联动选择器,得到了很多人的关注。鉴于很多人对这种手写插件的过程很好奇,所以写了几篇文章,来说说它的成长史~ 在阅读本文之前,确保你有稍微看过 MultiPicker ...

    tabalt 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<