详解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 相关文章推荐
JS 分号引起的一段调试问题
Jun 18 Javascript
基于jquery的返回顶部效果(兼容IE6)
Jan 17 Javascript
javascript 单例/单体模式(Singleton)
Apr 07 Javascript
原生javascript图片自动或手动切换示例附演示源码
Sep 04 Javascript
JavaScript中对循环语句的优化技巧深入探讨
Jun 06 Javascript
jquery对Json的各种遍历方法总结(必看篇)
Sep 29 Javascript
Node.js使用MySQL连接池的方法实例
Feb 11 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
Aug 09 jQuery
实例分析vue循环列表动态数据的处理方法
Sep 28 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
Aug 23 Javascript
Openlayers实现距离面积测量
Sep 28 Javascript
antd table按表格里的日期去排序操作
Nov 17 Javascript
基于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
基于asp+ajax和数据库驱动的二级联动菜单
2010/05/06 PHP
php连接Access数据库错误及解决方法
2013/06/20 PHP
PHP访问Google Search API的方法
2015/03/05 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
Yii2创建表单(ActiveForm)方法详解
2016/07/23 PHP
php中static 静态变量和普通变量的区别
2016/12/01 PHP
yii2.0框架场景的简单使用示例
2020/01/25 PHP
基于jquery的实现简单的表格中增加或删除下一行
2010/08/01 Javascript
浅析jQuery中常用的元素查找方法总结
2013/07/04 Javascript
使用jquery实现简单的ajax
2013/07/08 Javascript
jtable列中自定义button示例代码
2013/11/21 Javascript
ie8下修改input的type属性报错的解决方法
2014/09/16 Javascript
jQuery实现首页顶部可伸缩广告特效代码
2015/04/15 Javascript
深入了解JavaScript中的Symbol的使用方法
2015/07/28 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
Bootstrap实现渐变顶部固定自适应导航栏
2020/08/27 Javascript
原生js简单实现放大镜特效
2017/05/16 Javascript
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
Python生成随机数组的方法小结
2017/04/15 Python
python使用sqlite3时游标使用方法
2018/03/13 Python
Python Unittest根据不同测试环境跳过用例的方法
2018/12/16 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
python中翻译功能translate模块实现方法
2020/12/17 Python
canvas实现扭蛋机动画效果的示例代码
2018/10/17 HTML / CSS
英国在线珠宝店:The Jewel Hut
2017/03/20 全球购物
英国翻新电子产品购物网站:Tech Trade
2017/12/25 全球购物
西班牙购买隐形眼镜、眼镜和太阳镜网站:Lentiamo.es
2020/06/11 全球购物
2015企业年终工作总结范文
2015/05/27 职场文书
网络妈妈观后感
2015/06/08 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
安全教育日主题班会
2015/08/13 职场文书
Python基础之操作MySQL数据库
2021/05/06 Python
Golang Gob编码(gob包的使用详解)
2021/05/07 Golang
Python中zipfile压缩包模块的使用
2021/05/14 Python