详解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 相关文章推荐
ExtJS 设置级联菜单的默认值
Jun 13 Javascript
jquery验证手机号码、邮箱格式是否正确示例代码
Jul 28 Javascript
javascript页面倒计时实例
Jul 25 Javascript
Angular页面间切换及传值的4种方法
Nov 04 Javascript
基于Vuejs框架实现翻页组件
Jun 29 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
Dec 13 Javascript
jquery实现侧边栏左右伸缩效果的示例
Dec 19 jQuery
基于vue实现可搜索下拉框定制组件
Mar 26 Javascript
ios设备中angularjs无法改变页面title的解决方法
Sep 13 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
Apr 02 Javascript
vue.js实现备忘录demo
Jun 26 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
Jun 01 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
php网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
php skymvc 一款轻量、简单的php
2011/06/28 PHP
PHP中nowdoc和heredoc使用需要注意的一点
2014/03/21 PHP
PHP实现对文本数据库的常用操作方法实例演示
2014/07/04 PHP
PHP连接和操作MySQL数据库基础教程
2014/09/29 PHP
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
php可变长参数处理函数详解
2017/02/22 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
Valerio 发布了 Mootools
2006/09/23 Javascript
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
12款经典的白富美型—jquery图片轮播插件—前端开发必备
2013/01/08 Javascript
JavaScript获取多个数组的交集简单实例
2013/11/11 Javascript
IE6下拉框图层问题探讨及解决
2014/01/03 Javascript
对之前写的jquery分页做下升级
2014/06/19 Javascript
JavaScript使用循环和分割来替换和删除元素实例
2014/10/13 Javascript
简易的投票系统以及js刷票思路和方法
2015/04/07 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
JS获取时间的相关函数及时间戳与时间日期之间的转换
2016/02/04 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
2017/06/16 jQuery
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
npm scripts 使用指南详解
2018/10/08 Javascript
Python标准库之循环器(itertools)介绍
2014/11/25 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
Python控制鼠标键盘代码实例
2020/12/08 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
2021/02/01 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
传统HTML页面实现模块化加载的方法
2018/10/15 HTML / CSS
Ibood荷兰:互联网每日最佳在线优惠
2019/02/28 全球购物
施工资料员岗位职责
2014/01/06 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
工作证明英文模板
2014/10/21 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript