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 相关文章推荐
javascript 中对象的继承〔转贴〕
Jan 22 Javascript
仿163填写邮件地址自动显示下拉(无优化)
Nov 05 Javascript
JavaScript 全角转半角部分
Oct 28 Javascript
通过判断JavaScript的版本实现执行不同的代码
May 11 Javascript
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
Jun 11 Javascript
JQuery设置和去除disabled属性的5种方法总结
May 16 Javascript
javascript制作的滑动图片菜单
May 15 Javascript
jquery实现用户打分评分特效
May 28 Javascript
jquery ajaxfileupload异步上传插件
Nov 21 jQuery
vue、react等单页面项目应该这样子部署到服务器
Jan 03 Javascript
解决vue动态为数据添加新属性遇到的问题
Sep 18 Javascript
Vue实现图片轮播组件思路及实例解析
May 11 Javascript
使用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添加MySQL数据记录代码
2008/06/07 PHP
PHP mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
Win7下手动安装apache2.2、php5.4笔记
2015/04/03 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
Laravel5.7 Eloquent ORM快速入门详解
2019/04/12 PHP
Extjs3.0 checkboxGroup 动态添加item实现思路
2013/08/14 Javascript
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
JavaScript与HTML的结合方法详解
2015/11/23 Javascript
仿百度换肤功能的简单实例代码
2016/07/11 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
angularjs ui-router中路由的二级嵌套
2017/03/10 Javascript
JavaScript实现换肤功能
2017/09/15 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
2018/01/12 Javascript
Angular4 组件通讯方法大全(推荐)
2018/07/12 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
vue实现select下拉显示隐藏功能
2019/09/30 Javascript
JS动态图片的实现方法完整示例
2020/01/13 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
Python的Flask框架中集成CKeditor富文本编辑器的教程
2016/06/13 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
python检查目录文件权限并修改目录文件权限的操作
2020/03/11 Python
python的Jenkins接口调用方式
2020/05/12 Python
pytorch SENet实现案例
2020/06/24 Python
css3打造一款漂亮的卡哇伊按钮
2013/03/20 HTML / CSS
CSS3 中的@keyframes介绍
2014/09/02 HTML / CSS
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
大三学生做职业规划:给未来找个方向
2014/02/24 职场文书
2014年毕业演讲稿范文
2014/05/13 职场文书
医生见习报告范文
2014/11/03 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
Vue实现导入Excel功能步骤详解
2021/07/03 Vue.js