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 相关文章推荐
同时使用n个window onload加载实例介绍
Apr 25 Javascript
jQuery简易图片放大特效示例代码
Jun 09 Javascript
详谈jQuery中的this和$(this)
Nov 13 Javascript
apply和call方法定义及apply和call方法的区别
Nov 15 Javascript
jQuery+ajax读取并解析XML文件的方法
Sep 09 Javascript
Javascript中引用类型传递的知识点小结
Mar 06 Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
Mar 30 Javascript
JS实现的四级密码强度检测功能示例
May 11 Javascript
详解express与koa中间件模式对比
Aug 07 Javascript
vue加载自定义的js文件方法
Mar 13 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
Aug 09 jQuery
vue组件间的参数传递实例详解
Apr 26 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
PHP4实际应用经验篇(1)
2006/10/09 PHP
php addslashes及其他清除空格的方法是不安全的
2012/01/25 PHP
深入PHP内存相关的功能特性详解
2013/06/08 PHP
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
jquery的总体架构分析及实现示例详解
2014/11/08 Javascript
JS给Textarea文本框添加行号的方法
2015/08/20 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
2017/07/10 Javascript
浅谈Vue.js路由管理器 Vue Router
2018/08/16 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
2020/09/17 Javascript
[01:13:01]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第三场
2018/04/05 DOTA
python实现简单爬虫功能的示例
2016/10/24 Python
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
python实现读取大文件并逐行写入另外一个文件
2018/04/19 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
Python如何输出整数
2020/06/07 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
瑞典轮胎在线:Tirendo.se
2018/06/21 全球购物
法拉利英国精品店:Ferraris Boutique UK
2019/07/20 全球购物
演讲稿怎么写才完美
2014/01/02 职场文书
大学生就业求职信
2014/06/12 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
埃及王子观后感
2015/06/16 职场文书
班主任培训研修日志
2015/11/13 职场文书
2016党员学习《反对自由主义》心得体会
2016/01/22 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python
python数据分析之用sklearn预测糖尿病
2021/04/22 Python