• layui+ztree 树状下拉框


    一、效果图

    【关闭】

      

    【展开】    

         

    二、代码

     【HTML】注:布局一定要用DIV不是select否则效果····

     1  <div class="layui-form-item">
     2 
     3                 <label class="layui-form-label" style="float:left">部门</label>
     4                 <div class="layui-input-block">
     5                     @*<select name="PDEPT_KEY" lay-filter="PDEPT_KEY" id="PDEPT_KEY" lay-search="" lay-verType="tips">
     6                        <option value="" selected></option>
     7                         </select>*@
     8                     <div name="PDEPT_KEY" lay-filter="PDEPT_KEY" id="PDEPT_KEY" class="layui-form-select select-tree" lay-search=""></div>
     9 
    10                 </div>
    11         </div>

    【js】

       ① 以下为固定方法

      1   function initSelectTree(id, isMultiple, chkboxType, zNodes) {
      2             var setting = {
      3 
      4                 data: {
      5                     simpleData: {
      6                         enable: true
      7                     }
      8                 },
      9                 check: {
     10                     enable: false,
     11                     chkStyle: "radio",
     12                     radioType: "all",
     13 
     14                 },
     15                 chkboxType: { "Y": "ps", "N": "ps" },
     16                 callback: {
     17                     onClick: onClick,
     18                     onCheck: onCheck
     19                 }
     20 
     21             };
     22             if (isMultiple) {
     23                 setting.check.enable = isMultiple;
     24             }
     25             if (chkboxType !== undefined && chkboxType != null) {
     26                 setting.check.chkboxType = chkboxType;
     27             }
     28             var html = '<div class = "layui-select-title" >' +
     29                 '<input id="' + id + 'Show"' + 'type = "text" placeholder = "请选择" value = "" class = "layui-input" readonly>' +
     30                 '<i class= "layui-edge" ></i>' +
     31                 '</div>';
     32             $("#" + id).append(html);
     33 
     34             $("#" + id).append('<dl  class="layui-anim layui-anim-upbit" ><div class="tree-content scrollbar">' +
     35                 '<input hidden id="' + id + 'Hide" ' +
     36                 'name="' + $(".select-tree").attr("id") + '">' +
     37                 '<ul id="' + id + 'Tree" class="ztree scrollbar" style="margin-top:0;"></ul>' +
     38                 '</div></dl>');
     39             $("#" + id).bind("click", function () {
     40                 if ($(this).parent().find(".tree-content").css("display") !== "none") {
     41                     hideMenu()
     42                 } else {
     43                     $(this).addClass("layui-form-selected");
     44                     var Offset = $(this).offset();
     45                     var width = $(this).width() - 2 - 15;
     46                     $(this).parent().find(".tree-content").css({
     47                         left: Offset.left + "px",
     48                         top: Offset.top + $(this).height() + "px",
     49                         height: 250 + "px",
     50                     }).slideDown("fast");
     51                     $(this).parent().find(".tree-content").css({
     52                          width,
     53 
     54                     });
     55                     $("body").bind("mousedown", onBodyDown);
     56                 }
     57             });
     58             $.fn.zTree.init($("#" + id + "Tree"), setting, zNodes);
     59             hideMenu();
     60         }
     61 
     62         //function beforeClick(treeId, treeNode) {
     63         //    var check = (treeNode && !treeNode.isParent);
     64         //    if (!check) alert("只能选择城市...");
     65         //    return check;
     66         //}
     67 
     68         function onClick(event, treeId, treeNode) {
     69             var zTree = $.fn.zTree.getZTreeObj(treeId);
     70             if (zTree.setting.check.enable == true) {
     71                 zTree.checkNode(treeNode, !treeNode.checked, false)
     72                 assignment(treeId, zTree.getCheckedNodes());
     73             } else {
     74                 assignment(treeId, zTree.getSelectedNodes());
     75                 hideMenu();
     76             }
     77         }
     78 
     79         function onCheck(event, treeId, treeNode) {
     80             var zTree = $.fn.zTree.getZTreeObj(treeId);
     81             assignment(treeId, zTree.getCheckedNodes());
     82         }
     83 
     84         function hideMenu() {
     85             $(".select-tree").removeClass("layui-form-selected");
     86             $(".tree-content").fadeOut("fast");
     87             $("body").unbind("mousedown", onBodyDown);
     88         }
     89 
     90         function assignment(treeId, nodes) {
     91             var names = "";
     92             var ids = "";
     93             for (var i = 0, l = nodes.length; i < l; i++) {
     94                 names += nodes[i].name + ",";
     95                 ids += nodes[i].id + ",";
     96             }
     97             if (names.length > 0) {
     98                 names = names.substring(0, names.length - 1);
     99                 ids = ids.substring(0, ids.length - 1);
    100             }
    101             treeId = treeId.substring(0, treeId.length - 4);
    102             $("#" + treeId + "Show").attr("value", names);
    103             $("#" + treeId + "Show").attr("title", names);
    104             $("#" + treeId + "Hide").attr("value", ids);
    105         }
    106 
    107         function onBodyDown(event) {
    108             if ($(event.target).parents(".tree-content").html() == null) {
    109                 hideMenu();
    110             }
    111         }

     ②以下为变动方法

     1 Ajax("/BindCombox/GetDeptData", false, "POST", {}, function (data) {
     2                 var jsondata = JSON.parse(data);
     3                 if (jsondata.IsError) {
     4                     layer.msg("" + jsondata.ErrMsg, { icon: 5 });
     5                 } else {
     6                     zNodes = jsondata.Data;//获取数据源
     7 
     8 
     9                     initSelectTree("PDEPT_KEY", true, { "Y": "ps", "N": "s" }, zNodes);
    10                     var treeObj = $.fn.zTree.getZTreeObj("PDEPT_KEYTree");
    11                     var node = treeObj.getNodes();
    12                     treeObj.selectNode(node[0]);
    13                     treeObj.checkNode(node[0], true, true, true);
    14                 }
    15             });

      ③数据源格式

    1 [
    2 {"id":41.0,"name":"技术二部","pId":1.0,"open":true},
    3 {"id":42.0,"name":"技术三部","pId":null,"open":true}
    4 ]

    注:设置open为true,树状菜单为展开状态

    三、未实现效果问题解析

      ①没有引用js。ztree和layui

      ②布局采用select,没有使用div

      ③网络请求数据源不正确。

    注:此方法仍存在不足之处,望有能人指点

  • 相关阅读:
    快速查看表结构(zml)
    康尼机电的发送邮件的功能2
    康尼机电的发送邮件的功能1
    8.2文件控制总览只循环了第一行
    ClientScript.RegisterStartupScript
    康尼机电的委托协议中的点击操作显示标签卡的功能
    1020 Tree Traversals (25 分)
    1017 Queueing at Bank (我自己写的模拟时间的版本)
    1016 Phone Bills ( vector的使用)
    1015 Reversible Primes
  • 原文地址:https://www.cnblogs.com/xqz0618/p/layui_ztree.html
Copyright © 2020-2023  润新知