Element input树型下拉框的实现代码


Posted in Javascript onDecember 21, 2018

1.效果图

1.1 input聚焦时显示下拉框,再次点击下拉框或点击其他处下拉框消失,主要靠z-index添加遮罩实现

Element input树型下拉框的实现代码

1.2 实时过滤效果

Element input树型下拉框的实现代码

2.代码 ( vue.js + element-ui )

2.1 html

<el-form :model="form" size="mini" >
     <el-row>
      <el-col :span='12'>
        <el-form-item label="会计主管" >
         <el-input 
              placeholder="请选择会计主管" 
              class="width-220 selectTree-input" 
              v-model="form.MANAGER_NAME" 
              icon="caret-bottom" 
              auto-complete="off"
              @focus="focus($event)"
              @click.native="changeSelectTree()">
         </el-input>
         <div
          v-show="isShowSelect"
          style="position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 102;"
          @click="cancelManager">
         </div>
         <el-tree v-show="isShowSelect"
             empty-text="暂无数据"
             :highlight-current = true
             :default-expand-all = false
             :expand-on-click-node="false"
             :filter-node-method="filterNode"
             :data="userlist"
             node-key="chr_id"
             :props="defaultProps"
             @node-click="selectManage"
             class="objectTree"
             ref="selectTree">
         </el-tree>
        </el-form-item>
      </el-col>
      <el-col :span='12'>

      </el-col>
     </el-row>
    </el-form>

2.2 JS

import 'babel-polyfill'//兼容语法 async focus
export default {
 data(){
  return {
   form: {
    MANAGER_NAME: '',
    MANAGER_ID: '',
   },
   isShowSelect: false,// 是否显示会计主管的树状选择器
   userlist: [],// 会计主管的选项数据 
   defaultProps: { // 会计主管 树状选择器 的选项的配置参数
    children: 'children',
    label: 'code_name',
   },
  }
 },
 watch: {
  form: {//form.MANAGER_NAME变化时过滤节点
    handler(form){
     if(this.isShowSelect){
      this.$refs.selectTree.filter(form.MANAGER_NAME);
     }
    },
    deep: true,//深度监听,重要
  },
 },
 methods:{
    //下拉框的显示与隐藏
    changeSelectTree(){
      this.isShowSelect = !this.isShowSelect;
    },
    //input获取焦点事件,初始化树
    async focus(e) {
      let vm = this;
      vm.$refs.selectTree.filter("");
      vm.$refs.selectTree.setCurrentNode([]);
     },
    // 选择器的树节点
    filterNode(value, data) {
     if (!value) return true;
      if(!data.code_name){
        data.code_name = data.chr_code + " " + data.chr_name
      }
     return data.code_name.indexOf(value) !== -1;
    },
    //选择会计主管
    selectManage(data, Node) {
     this.form.MANAGER_NAME = data.code_name;//input赋值
     this.form.MANAGER_ID = data.chr_id;
     this.isShowSelect = false;// 关闭选择器
    }, 
    //点击遮罩层,取消选择会计主管
    cancelManager(){
     this.isShowSelect = false
    },
 }
}

2.3 css

<style lang="scss">
 /*下拉框选择树*/
 .objectTree {
  position: absolute;
  overflow: auto;
  z-index: 100;
  width: 110%;
  height: 200px;
  border: 1px solid #ddd;
  line-height: normal; 
  z-index: 204;
 }
 .selectTree-input {
  input:focus {
   z-index: 204;//103
  }
 }
 .width-220{
  width: 220px
 }
</style>

2.4 参考数据

//示例下拉框数据
this.userList = [{
 chr_code: "001001051",
 chr_id: "9853",
 chr_name: "张海舒",
 is_leaf: "1",
 user_type: "0",
}]

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

Javascript 相关文章推荐
JavaScript 异步调用框架 (Part 5 - 链式实现)
Aug 04 Javascript
JS分割字符串并放入数组的函数
Jul 04 Javascript
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
Oct 21 Javascript
js取滚动条的尺寸的函数代码
Nov 30 Javascript
深入理解Javascript作用域与变量提升
Dec 09 Javascript
jQuery中position()方法用法实例
Jan 16 Javascript
JavaScript中pop()方法的使用教程
Jun 09 Javascript
Jquery Mobile 自定义按钮图标
Nov 18 Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
May 25 Javascript
vue父组件给子组件的组件传值provide inject的方法
Oct 23 Javascript
如何在node环境实现“get数据解析”代码实例
Jul 03 Javascript
vue使用element-ui实现表单验证
Dec 13 Vue.js
傻瓜式vuex语法糖kiss-vuex整理
Dec 21 #Javascript
vue项目设置scrollTop不起作用(总结)
Dec 21 #Javascript
浅谈Vue服务端渲染框架Nuxt的那些事
Dec 21 #Javascript
JS二级菜单不同实现方法分析【4种方法】
Dec 21 #Javascript
vue中eslintrc.js配置最详细介绍
Dec 21 #Javascript
angularjs http与后台交互的实现示例
Dec 21 #Javascript
JS执行控制之节流模式实例分析
Dec 21 #Javascript
You might like
PHP安装全攻略:APACHE
2006/10/09 PHP
基于文本的访客签到簿
2006/10/09 PHP
解析strtr函数的效率问题
2013/06/26 PHP
php小技巧之过滤ascii控制字符
2014/05/14 PHP
php匹配字符中链接地址的方法
2014/12/22 PHP
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
判断复选框是否被选中的两种方法
2014/06/04 Javascript
JS实现的页面自定义滚动条效果
2015/10/26 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
Node.js搭建WEB服务器的示例代码
2018/08/15 Javascript
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
2018/10/25 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
2020/03/03 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
Node在Controller层进行数据校验的过程详解
2020/08/28 Javascript
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
[54:54]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python 冒泡,选择,插入排序使用实例
2015/02/05 Python
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
Python实现感知机(PLA)算法
2017/12/20 Python
Python绘制的二项分布概率图示例
2018/08/22 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
PyQt5重写QComboBox的鼠标点击事件方法
2019/06/25 Python
django foreignkey(外键)的实现
2019/07/29 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
Python collections模块的使用方法
2020/10/09 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
Shopee印度尼西亚:东南亚与台湾市场最大电商平台
2018/06/17 全球购物
保护环境的标语
2014/06/09 职场文书
监察建议书
2015/02/04 职场文书
2015年导购员工作总结
2015/04/25 职场文书
计划生育责任书
2015/05/09 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书