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简单的弹出框有关闭按钮
May 05 Javascript
js拼接html注意问题示例探讨
Jul 14 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
Jan 13 Javascript
基于jQuery实现网页进度显示插件
Mar 04 Javascript
JQuery中DOM事件合成用法实例分析
Jun 13 Javascript
jquery插件jquery.confirm弹出确认消息
Dec 22 Javascript
jQuery向父辈遍历的简单方法
Sep 18 Javascript
捕获未处理的Promise错误方法
Oct 13 Javascript
浅谈实现vue2.0响应式的基本思路
Feb 13 Javascript
Vue.js点击切换按钮改变内容的实例讲解
Aug 22 Javascript
vue使用showdown并实现代码区域高亮的示例代码
Oct 17 Javascript
微信小程序pinker组件使用实现自动相减日期
May 07 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
php 使用array函数实现分页
2015/02/13 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
Laravel中的Blade模板引擎示例详解
2017/10/10 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
js同时按下两个方向键
2007/12/01 Javascript
js验证上传图片的方法
2015/05/12 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
2015/12/26 Javascript
js动态生成form 并用ajax方式提交的实现方法
2016/09/09 Javascript
AngularJS动态菜单操作指令
2017/04/25 Javascript
vue-cli webpack 开发环境跨域详解
2017/05/18 Javascript
React-intl 实现多语言的示例代码
2017/11/03 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
2019/04/22 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
Python多进程原理与用法分析
2018/08/21 Python
python生成器与迭代器详解
2019/01/01 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
python sklearn库实现简单逻辑回归的实例代码
2019/07/01 Python
django实现用户注册实例讲解
2019/10/30 Python
外语专业毕业生自我评价分享
2013/10/05 职场文书
军训生自我鉴定范文
2013/12/27 职场文书
企业项目策划书
2014/01/11 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
学校门卫岗位职责范本
2014/06/30 职场文书
119消防日活动总结
2014/08/29 职场文书
工作检讨书怎么写
2015/01/23 职场文书
安装工程师岗位职责
2015/02/13 职场文书
婚礼家长致辞
2015/07/27 职场文书
2019年入党思想汇报
2019/03/25 职场文书
解决golang结构体tag编译错误的问题
2021/05/02 Golang
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android
「天才王子的赤字国家重生术」妮妮姆·拉雷粘土人开订
2022/03/21 日漫