详解layui中的树形关于取值传值问题


Posted in Javascript onJanuary 16, 2018

本文介绍了layui中的树形关于取值传值问题,分享给大家,具体如下:

详解layui中的树形关于取值传值问题

这个是我们需要的效果,实际操作中会先执行渲染 然后在执行方法,然后我们发现树形的JSON是空,调试了N遍一直以为是优先级别的问题了。

最后解决方案是

<script type="text/javascript">
  ////layui 的 form 模块
  var form = "";
  layui.use(['form'], function () {
    // $ = layui.jquery;
    form = layui.form;

    //获取节点数据
    getTreeData();
    //return false;
  });
  function getTreeData() {
    $.ajax({
      //async: false,
      type: "post",
      url: "/api/WebFW//getOrgTree",
      datatype: "json",
      contenttype: "application/json; charset=utf-8",
      success: function (jdata) {
        var xtree1 = new layuiXtree({
          elem: 'xtree1',
          form: form,
          data: strToJson(jdata),
          isopen: true, //false初始关闭,true打开
          click: function (data) { //节点选中状态改变事件监听,全选框有自己的监听事件
            console.log(data.elem); //得到checkbox原始DOM对象
            console.log(data.elem.checked); //是否选中,true选中
            alert(data.value); //弹出value值
          }
        });

        //获取选中val
        document.getElementById('btn1').onclick = function () {
          var oCks = xtree1.GetChecked();
          for (var i = 0; i < oCks.length; i++) {
            alert(oCks[i].value);
          }
        }

        //子节点选中改变,父节点更改自身状态
        layuiXtree.prototype.ParendCheck = function (ckelem) {
          var _this = this;
          var xtree_p = ckelem.parentNode.parentNode;
          if (xtree_p.getAttribute('class') == 'layui-xtree-item') {
            var xtree_all = _this.getChildByClassName(xtree_p, 'layui-xtree-item');
            var xtree_count = 0;
            for (var i = 0; i < xtree_all.length; i++) {
              if (_this.getChildByClassName(xtree_all[i], 'layui-xtree-checkbox')[0].checked) {
                xtree_count++;
              }
            }
            if (xtree_count <= 0) {
              _this.getChildByClassName(xtree_p, 'layui-xtree-checkbox')[0].checked = false;
              _this.getChildByClassName(xtree_p, 'layui-xtree-checkbox')[0].nextSibling.classList.remove('layui-form-checked');
            } else {
              _this.getChildByClassName(xtree_p, 'layui-xtree-checkbox')[0].checked = true;
              _this.getChildByClassName(xtree_p, 'layui-xtree-checkbox')[0].nextSibling.classList.add('layui-form-checked');
            }
            this.ParendCheck(_this.getChildByClassName(xtree_p, 'layui-xtree-checkbox')[0]);
          }
        }

        //渲染之前按照选中的末级去改变父级选中状态
        layuiXtree.prototype.ParentCheckboxChecked = function (e) {
          var _this = this;
          if (e.parentNode.parentNode.getAttribute('class') == 'layui-xtree-item') {
            var _pe = _this.getChildByClassName(e.parentNode.parentNode, 'layui-xtree-checkbox')[0];
            _pe.checked = true;
            _this.ParentCheckboxChecked(_pe);
          }
        }

        //获取全部选中的末级checkbox对象
        layuiXtree.prototype.GetChecked = function () {
          var _this = this;
          var arr = new Array();
          var arrIndex = 0;
          var cks = _this.getByClassName('layui-xtree-checkbox');
          for (var i = 0; i < cks.length; i++) {
            if (cks[i].checked && cks[i].getAttribute('data-xend') == '1') {
              arr[arrIndex] = cks[i];
              arrIndex++;
            }
          }
          return arr;
        }

        //获取全部的原始checkbox对象
        layuiXtree.prototype.GetAllCheckBox = function () {
          var _this = this;
          var arr = new Array();
          var arrIndex = 0;
          var cks = _this.getByClassName('layui-xtree-checkbox');
          for (var i = 0; i < cks.length; i++) {
            arr[arrIndex] = cks[i];
            arrIndex++;
          }
          return arr;
        }

        //根据值来获取其父级的checkbox原dom对象
        layuiXtree.prototype.GetParent = function (a) {
          var _this = this;
          var cks = _this.getByClassName('layui-xtree-checkbox');
          for (var i = 0; i < cks.length; i++) {
            if (cks[i].value == a) {
              if (cks[i].parentNode.parentNode.getAttribute('id') == _this._container.getAttribute('id')) return null;
              return _this.getChildByClassName(cks[i].parentNode.parentNode, 'layui-xtree-checkbox')[0];
            }
          }
          return null;
        }
      }
    });
  }

  function strToJson(str) {
    var json = (new Function("return " + str))();
    return json;
  }
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
xmlHTTP实例
Oct 24 Javascript
javascript 对象比较实现代码
Apr 27 Javascript
关于Javascript加载执行优化的研究报告
Dec 16 Javascript
javascript与Python快速排序实例对比
Aug 10 Javascript
Bootstrap每天必学之媒体对象
Nov 30 Javascript
Node.JS中快速扫描端口并发现局域网内的Web服务器地址(80)
Sep 18 Javascript
小程序实现展开/收起的效果示例
Sep 22 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
Nov 14 Javascript
vue实现短信验证码登录功能(流程详解)
Dec 10 Javascript
js实现盒子滚动动画效果
Aug 09 Javascript
JS轮播图的实现方法
Aug 24 Javascript
vue 动态添加的路由页面刷新时失效的原因及解决方案
Feb 26 Vue.js
基于JavaScript实现抽奖系统
Jan 16 #Javascript
详解JavaScript基础知识(JSON、Function对象、原型、引用类型)
Jan 16 #Javascript
浅谈vue的props,data,computed变化对组件更新的影响
Jan 16 #Javascript
Parcel 打包示例(React HelloWorld)
Jan 16 #Javascript
详解Vue快速零配置的打包工具——parcel
Jan 16 #Javascript
vue watch自动检测数据变化实时渲染的方法
Jan 16 #Javascript
动态加载权限管理模块中的Vue组件
Jan 16 #Javascript
You might like
总结对比php中的多种序列化
2016/08/28 PHP
phpcms的分类名称和类别名称的调用
2017/01/05 PHP
Yii 2中的load()和save()示例详解
2017/08/03 PHP
php设计模式之装饰模式应用案例详解
2019/06/17 PHP
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
JavaScript判断窗口是否最小化的代码(跨浏览器)
2010/08/01 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
jQuery获取某天的农历日期并判断是否除夕或新年的方法
2016/03/01 Javascript
JS使用正则表达式验证身份证号码
2017/06/23 Javascript
Angular4如何自定义首屏的加载动画详解
2017/07/26 Javascript
Extjs 中的 Treepanel 实现菜单级联选中效果及实例代码
2017/08/22 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
使用Angular自定义字段校验指令的方法示例
2019/02/01 Javascript
vue+element表格导出为Excel文件
2019/09/26 Javascript
[06:16]DOTA2守卫传承者——职业选手谈心路历程
2015/02/26 DOTA
Python实现的中国剩余定理算法示例
2017/08/05 Python
Django 使用Ajax进行前后台交互的示例讲解
2018/05/28 Python
python使用epoll实现服务端的方法
2018/10/16 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
2018/10/22 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
python用fsolve、leastsq对非线性方程组求解
2018/12/15 Python
浅谈python requests 的put, post 请求参数的问题
2019/01/02 Python
Python计算一个点到所有点的欧式距离实现方法
2019/07/04 Python
django 微信网页授权认证api的步骤详解
2019/07/30 Python
python用什么编辑器进行项目开发
2020/06/17 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
阿拉伯世界最大的电子商务网站:Souq沙特阿拉伯
2016/10/28 全球购物
马来西亚最大的电器网站:Senheng
2017/10/13 全球购物
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
铁路个人事迹材料
2014/01/30 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
优秀教师先进个人事迹材料
2014/08/31 职场文书
锅炉工岗位职责
2015/02/13 职场文书
python 制作一个gui界面的翻译工具
2021/05/14 Python
Python基础教程,Python入门教程(超详细)
2021/06/24 Python