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 相关文章推荐
ECMAScript 创建自己的js类库
Nov 22 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
Jan 13 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
Sep 06 Javascript
jQuery获取单击节点对象的方法
Jun 02 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
Jun 28 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
Dec 13 Javascript
jQuery解析返回的xml和json方法详解
Jan 05 Javascript
Angular.JS去掉访问路径URL中的#号详解
Mar 30 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
Apr 11 Javascript
JavaScript实现二维坐标点排序效果
Jul 18 Javascript
Angular刷新当前页面的实现方法
Nov 21 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
Jun 14 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
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
php多文件上传功能实现原理及代码
2013/04/18 PHP
php程序员应具有的7种能力小结
2014/11/27 PHP
php实现生成验证码实例分享
2016/04/10 PHP
实现laravel 插入操作日志到数据库的方法
2019/10/11 PHP
用Div仿showModalDialog模式菜单的效果的代码
2007/03/05 Javascript
javascript json 新手入门文档
2009/12/03 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
js中判断对象是否为空的三种实现方法
2013/12/23 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
详细解密jsonp跨域请求
2015/04/15 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
2016/12/23 Javascript
vue-cli+webpack记事本项目创建
2017/04/01 Javascript
详解vee-validate的使用个人小结
2017/06/07 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
微信小程序textarea层级过高的解决方法
2019/03/04 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
2019/05/23 Javascript
回顾Javascript React基础
2019/06/15 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
Python数据预处理之数据规范化(归一化)示例
2019/01/08 Python
python无序链表删除重复项的方法
2020/01/17 Python
python global和nonlocal用法解析
2020/02/03 Python
TensorFlow基本的常量、变量和运算操作详解
2020/02/03 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
2020/06/10 Python
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
HTML5 Canvas基本线条绘制的实例教程
2016/03/17 HTML / CSS
美国摄影爱好者购物网站:Focus Camera
2016/10/21 全球购物
美国基督教约会网站:ChristianCafe.com
2020/02/04 全球购物
实现向右循环移位
2014/07/31 面试题
应急处置方案
2014/06/16 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
求职意向书范本
2015/05/11 职场文书
队名及霸气口号大全
2015/12/25 职场文书