详解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 相关文章推荐
模拟用户操作Input元素,不会触发相应事件
May 11 Javascript
javascript实现二分查找法实现代码
Nov 12 Javascript
jquery 页面滚动到指定DIV实现代码
Sep 25 Javascript
JavaScript学习笔记之Function对象
Jan 22 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
Sep 04 Javascript
ES6新特性一: let和const命令详解
Apr 20 Javascript
js + css实现标签内容切换功能(实例讲解)
Oct 09 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
May 08 Javascript
解决vue keep-alive 数据更新的问题
Sep 21 Javascript
JavaScript中Dom操作实例详解
Jul 08 Javascript
layui实现三级联动效果
Jul 26 Javascript
vue中 数字相加为字串转化为数值的例子
Nov 07 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读取和编写XML DOM的实现代码
2011/02/03 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
php实现图片上传并进行替换操作
2016/03/15 PHP
PHP数据对象PDO操作技巧小结
2016/09/27 PHP
PHP 与 UTF-8 的最佳实践详细介绍
2017/01/04 PHP
js的写法基础分析
2011/01/17 Javascript
JavaScript判断文件上传类型的方法
2014/09/02 Javascript
JS实现FLASH幻灯片图片切换效果的方法
2015/03/04 Javascript
js简单的点击返回顶部效果实现方法
2015/04/10 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
JS实现身份证输入框的输入效果
2017/08/21 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
Vue.js实现可排序的表格组件功能示例
2019/02/19 Javascript
微信小程序前端自定义分享的实现方法
2019/06/13 Javascript
基于 vue-skeleton-webpack-plugin 的骨架屏实战
2019/08/05 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
Python提取Linux内核源代码的目录结构实现方法
2016/06/24 Python
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
windows系统下Python环境的搭建(Aptana Studio)
2017/03/06 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
python射线法判断一个点在图形区域内外
2019/06/28 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
Win10环境python3.7安装dlib模块趟过的坑
2019/08/01 Python
关于tf.nn.dynamic_rnn返回值详解
2020/01/20 Python
python中id函数运行方式
2020/07/03 Python
浅谈对python中if、elif、else的误解
2020/08/20 Python
Python Unittest原理及基本使用方法
2020/11/06 Python
高档奢华时装在线目的地:FORWARD by elyse walker
2017/10/16 全球购物
2014年师德师风自我剖析材料
2014/09/27 职场文书
村主任当选感言
2015/08/01 职场文书
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL