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 相关文章推荐
js弹出div并显示遮罩层
Feb 12 Javascript
Javascript中call和apply函数的比较和使用实例
Feb 03 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
Mar 09 Javascript
几种经典排序算法的JS实现方法
Mar 25 Javascript
基于jQuery实现弹幕APP
Feb 10 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
Jun 16 Javascript
Vue from-validate 表单验证的示例代码
Sep 26 Javascript
vue 项目如何引入微信sdk接口的方法
Dec 18 Javascript
浅谈基于Vue.js的移动组件库cube-ui
Dec 20 Javascript
详解babel升级到7.X采坑总结
May 12 Javascript
了解javascript中let和var及const关键字的区别
May 24 Javascript
JavaScript如何使用插值实现图像渐变
Jun 28 Javascript
傻瓜式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
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
2010/03/15 PHP
php array_unique之后json_encode需要注意
2011/01/02 PHP
浅谈php serialize()与unserialize()的用法
2013/06/05 PHP
php文件读取方法实例分析
2015/06/20 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
使用PHP反射机制来构造&quot;CREATE TABLE&quot;的sql语句
2019/03/21 PHP
js+html+css实现鼠标移动div实例
2013/01/30 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
2015/04/01 Javascript
简述JavaScript的正则表达式中test()方法的使用
2015/06/16 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
Bootstrap进度条学习使用
2017/02/09 Javascript
Bootstrap fileinput组件封装及使用详解
2017/03/10 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
react-router实现按需加载
2017/05/09 Javascript
js canvas实现QQ拨打电话特效
2017/05/10 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
Webpack执行命令参数详解
2017/06/17 Javascript
layui表格分页 记录勾选的实例
2019/09/02 Javascript
python实现数组插入新元素的方法
2015/05/22 Python
Python对文件操作知识汇总
2016/05/15 Python
Python守护进程和脚本单例运行详解
2017/01/06 Python
python书籍信息爬虫实例
2018/03/19 Python
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
flask应用部署到服务器的方法
2019/07/12 Python
Python如何使用turtle库绘制图形
2020/02/26 Python
Python如何实现机器人聊天
2020/09/10 Python
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
2014/07/11 面试题
高中毕业自我鉴定范文
2013/10/02 职场文书
两年的个人工作自我评价
2014/01/10 职场文书
社区低保工作总结2015
2015/07/23 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书