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 相关文章推荐
Node.js文件操作详解
Aug 16 Javascript
使用CamanJS在Web页面上处理图像的技巧
Aug 18 Javascript
使用JQuery实现的分页插件分享
Nov 05 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
Nov 29 Javascript
javascript实现保留两位小数的多种方法
Dec 18 Javascript
jQuery实现的调整表格行tr上下顺序
Jan 10 Javascript
jquery基于layui实现二级联动下拉选择(省份城市选择)
Jun 20 jQuery
angular2中Http请求原理与用法详解
Jan 11 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
Apr 25 Javascript
JQuery的加载和选择器用法简单示例
May 13 jQuery
利用JS响应式修改vue实现页面的input值
Sep 02 Javascript
vue ssr+koa2构建服务端渲染的示例代码
Mar 23 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个人网站架设连环讲(三)
2006/10/09 PHP
php 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
带密匙的php加密解密示例分享
2014/01/29 PHP
浅谈discuz密码加密的方式
2014/05/22 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
2015/07/31 PHP
在textarea中屏蔽js的某个function的javascript代码
2007/04/20 Javascript
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
原生js操作checkbox用document.getElementById实现
2013/10/12 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
javascript实现表单提交后,提交按钮不可用的方法
2015/04/18 Javascript
jQuery+JSON实现AJAX二级联动实例分析
2015/12/18 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
JSONP跨域请求实例详解
2016/07/04 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
vue.js实现刷新当前页面的方法教程
2017/07/05 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
2020/04/21 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
vue项目中mock.js的使用及基本用法
2019/05/22 Javascript
javascript将扁平的数据转为树形结构的高效率算法
2020/02/27 Javascript
详解如何使用React Hooks请求数据并渲染
2020/10/18 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
[48:48]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Dream TIME
2014/05/21 DOTA
[01:02:38]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第二场 1月10日
2021/03/11 DOTA
Python上传package到Pypi(代码简单)
2016/02/06 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
jupyter notebook读取/导出文件/图片实例
2020/04/16 Python
tensorflow转换ckpt为savermodel模型的实现
2020/05/25 Python
快速一键生成Python爬虫请求头
2021/03/04 Python
给面试官的感谢信
2014/02/01 职场文书
《搭石》教学反思
2014/04/07 职场文书
在校大学生自我评价范文
2014/09/12 职场文书
大学感恩节活动策划方案
2014/10/11 职场文书
美术教师个人总结
2015/02/06 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书
2015中学教学工作总结
2015/07/22 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书