zTree 树插件实现全国五级地区点击后加载的示例


Posted in Javascript onFebruary 05, 2018

在项目功能中需要录入户籍地和现居住地,为减少用户输入量,将使用树插件选择全国五级地区+输入框输入详细地址。这里优先使用了zTree树插件。为了以后使用学习,在这里进行相关记录。当然在实现过程中参考各大神的文章是必不可少的,可以结合了自己的实际需求进行快速解决问题。

zTree 树插件官网简介

zTree 是一个依靠 jQuery 实现的多功能 “树插件”。优异的性能、灵活的配置、多种功能的组合是 zTree 最大优点。

zTree 树插件官网地址

http://www.treejs.cn/v3/main.php#_zTreeInfo

功能实现代码

数据库地区表基本结构:

regionType 地区级别
path 地区编码
name 地区名称
parentRegion 上级地区

页面代码:

<!-- 户籍地、现居住地 -->
<tr>
 <td colspan="3">
  <div class="form-group">
   <label style="display: block;">户籍地</label>
   <input type="hidden" name="domiciliary" id="domiciliary">
   <input type="text" class="form-control" style="width:300px;float:left;" id="domiciliary-text" value="" onclick="showRegion('domiciliary')" placeholder="点击选择地区" maxlength="20" readonly="readonly">
   <input type="text" class="form-control" style="width:320px;float:left;" name="domiciliaryAddress" value="" placeholder="详细地址" maxlength="100">
  </div>
 </td>
</tr>
<tr>
 <td colspan="3">
  <div class="form-group">
   <label style="display: block;">现居住地址</label>
   <input type="hidden" name="bide" id="bide">
   <input type="text" class="form-control" style="width:300px;float:left;" id="bide-text" value="" onclick="showRegion('bide')" placeholder="点击选择地区" maxlength="20" readonly="readonly">
   <input type="text" class="form-control" style="width:320px;float:left;" name="bideAddress" value="" placeholder="详细地址" maxlength="100">
  </div>
 </td>
</tr>
<!-- bootstrap 模态框(Modal) -->
<div class="modal fade" id="regionModal" tabindex="-1" role="dialog" aria-hidden="true">
 <input type="hidden" id="regionModalType" />
 <div class="modal-dialog">
  <div class="modal-content">
   <div class="modal-body">
    <!-- zTree 的容器 -->
    <ul id="treeRegion" class="ztree"></ul>
   </div>
   <div class="modal-footer">
    <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
    <button type="button" class="btn btn-primary" onclick="confimRegion()">确认</button>
   </div>
  </div>
 </div>
</div>

效果:

zTree 树插件实现全国五级地区点击后加载的示例

js代码:

$(document).ready(function() {
 // zTree 参数配置
 var setting = {
  view: {
   showIcon: false,//是否显示节点的图标
   selectedMulti: false //设置是否允许同时选中多个节点。默认值: true。
  },
  data: {
   simpleData: {
    enable: true, //是否采用简单数据模式 (Array)。默认值:false
    idKey: "path", //节点数据中保存唯一标识的属性名称。
    pIdKey: "parentRegion", //节点数据中保存其父节点唯一标识的属性名称。
    rootPid: "10000000000000" //用于修正根节点父节点数据,即 pIdKey 指定的属性值。
   }
  },
  callback: {
   // 用于捕获节点被点击的事件回调函数
   onClick: function(event, treeId, treeNode, clickFlag) {
    var treeObj = $.fn.zTree.getZTreeObj(treeId); //根据 treeId 获取 zTree 对象
    // 这里判断节点被点击时,如果有已经加载下级节点,则不用请求服务器
    if((treeNode.children == null || treeNode.children == "undefined")){
     if(!$("#"+treeNode.tId+"_switch").hasClass("center_docu") && !$("#"+treeNode.tId+"_switch").hasClass("bottom_docu")){
      // 请求服务器,获得点击地区的下级地区
      $.ajax({
       type: "get",
       async: false,
       url: "tRegion/ajaxArea",
       data:{
        path:treeNode.path
       },
       dataType:"json",
       success: function(data){
        if(data != null && data.length != 0){
         //添加新节点
         var newNodes = treeObj.addNodes(treeNode, data);
         $(newNodes).each(function(i,n){
          var id = n.tId+"_switch";
          if($("#"+id).hasClass("center_docu")){
           $("#"+id).removeClass("center_docu");
           $("#"+id).addClass("center_close");
          }
          if($("#"+id).hasClass("bottom_docu")){
           $("#"+id).removeClass("bottom_docu");
           $("#"+id).addClass("bottom_close");
          }
         });
        }else{
         var id = treeNode.tId+"_switch";
         if($("#"+id).hasClass("center_close")){
          $("#"+id).removeClass("center_close");
          $("#"+id).addClass("center_docu");
         }
         if($("#"+id).hasClass("bottom_close")){
           $("#"+id).removeClass("bottom_close");
           $("#"+id).addClass("bottom_docu");
          }
        }
       },
       error:function(event, XMLHttpRequest, ajaxOptions, thrownError){
        result = true;
        toastr.error("请求失败!");
       }
      });
     }
    }else{
     // 展开当前节点
     treeObj.expandNode(treeNode);
    }
   }
   }
  };
 // 显示区域树,加载顶级节点
 $.ajax({
  type: "get",
  url: "tRegion/ajaxArea",
  data: {path:"10000000000000"},
  success: function(data, status) {
   if (status == "success") {
    // 初始化区域树
    $.fn.zTree.init($("#treeRegion"), setting, data);
    // 获得zTree对象
    var treeObj = $.fn.zTree.getZTreeObj("treeRegion");
    // 获得初始化的所有节点,即顶级节点
    var nodes = treeObj.getNodes();
    $(nodes).each(function(i,n){
     var id = n.tId+"_switch";
     if($("#"+id).hasClass("roots_docu")){
      $("#"+id).removeClass("roots_docu");
      $("#"+id).addClass("roots_close");
     }
     if($("#"+id).hasClass("center_docu")){
      $("#"+id).removeClass("center_docu");
      $("#"+id).addClass("center_close");
     }
     if($("#"+id).hasClass("bottom_docu")){
      $("#"+id).removeClass("bottom_docu");
      $("#"+id).addClass("bottom_close");
     }
    });
   }
  },
  error : function() {
   toastr.error('Error');
  },
 });
});
function showRegion(type){
 // 显示模态框
 $('#regionModal').modal('show');
 $("#regionModalType").val(type);
}
// 选择地区确认
function confimRegion(){
 var type = $("#regionModalType").val();
 var treeObj = $.fn.zTree.getZTreeObj("treeRegion");
 var node = treeObj.getSelectedNodes(); //选中节点
 var regionType = node[0].regionType;
 if(Number(regionType) >= 5){
  $("#"+type+"-text").val(node[0].name);
  $("#"+type).val(node[0].path);
  $('#regionModal').modal('hide');
 }
}

实现效果:

zTree 树插件实现全国五级地区点击后加载的示例

以上这篇zTree 树插件实现全国五级地区点击后加载的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
13 个JavaScript 性能提升技巧分享
Jul 26 Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
Nov 11 Javascript
JavaScript实现的使用键盘控制人物走动实例
Aug 27 Javascript
jquery分页插件jquery.pagination.js使用方法解析
Apr 01 Javascript
老生常谈JavaScript 函数表达式
Sep 01 Javascript
微信小程序 LOL 英雄介绍开发实例
Sep 30 Javascript
js实现界面向原生界面发消息并跳转功能
Nov 22 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
Jan 23 Javascript
JS实现运动缓冲效果的封装函数示例
Feb 18 Javascript
JS如何定义用字符串拼接的变量
Jul 11 Javascript
vue 清空input标签 中file的值操作
Jul 21 Javascript
vue实现验证用户名是否可用
Jan 20 Vue.js
使用vue如何构建一个自动建站项目
Feb 05 #Javascript
在 webpack 中使用 ECharts的实例详解
Feb 05 #Javascript
在Vue中使用echarts的方法
Feb 05 #Javascript
JavaScript中Object基础内部方法图
Feb 05 #Javascript
基于axios封装fetch方法及调用实例
Feb 05 #Javascript
JS设计模式之观察者模式实现实时改变页面中金额数的方法
Feb 05 #Javascript
JS中Map和ForEach的区别
Feb 05 #Javascript
You might like
PHP对象转换为数组函数(递归方法)
2012/02/04 PHP
php中explode与split的区别介绍
2012/10/03 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
2013/06/24 PHP
用PHP实现弹出消息提示框的两种方法
2013/12/17 PHP
PHP浮点数精度问题汇总
2015/05/13 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
PHP实现递归无限级分类
2015/10/22 PHP
zend框架实现支持sql server的操作方法
2016/12/08 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
PHP实现的折半查询算法示例
2017/10/09 PHP
javaScript call 函数的用法说明
2010/04/09 Javascript
javascript代码加载优化方法
2011/01/30 Javascript
js事件(Event)知识整理
2012/10/11 Javascript
javascript四舍五入函数代码分享(保留后几位)
2013/12/10 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
老生常谈js-react组件生命周期
2017/05/02 Javascript
JS实现标签滚动切换效果
2017/12/25 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
2018/08/13 jQuery
js/jQuery实现全选效果
2019/06/17 jQuery
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
vue组件中节流函数的失效的原因和解决方法
2020/12/02 Vue.js
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
python修改微信和支付宝步数的示例代码
2020/10/12 Python
python爬虫中PhantomJS加载页面的实例方法
2020/11/12 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
贝尔帐篷精品店:Bell Tent Boutique
2019/06/12 全球购物
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
Ajax和javascript的区别
2013/07/20 面试题
一月红领巾广播稿
2014/02/11 职场文书
给老婆的道歉信
2015/01/20 职场文书
企业财务总监岗位职责
2015/04/03 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
Python集合set()使用的方法详解
2022/03/18 Python