在vue中根据光标的显示与消失实现下拉列表


Posted in Javascript onSeptember 29, 2019

重点知识

mousedown事件:mousedown的执行顺序大于blur事件

HTML代码

<template>
 <div>
  <input ref="search" @focus="showList(true)" v-model="search" @blur="showList(false)"/>
  <ul v-if="state">
   <li style="width: 100px;background: goldenrod;color: #fff" @mousedown="handleSearch(1)">1</li>
   <li style="width: 100px;background: goldenrod;color: #fff" @mousedown="handleSearch(2)">2</li>
   <li style="width: 100px;background: goldenrod;color: #fff" @mousedown="handleSearch(3)">3</li>
   <li style="width: 100px;background: goldenrod;color: #fff" @mousedown="handleSearch(4)">4</li>
  </ul>
 </div>
</template>

通过上面的代码生成了我们的基本下拉列表,接下来是data数据的解析:

data() {
   return {
    search: '',//搜索框值
    state: false,//是否显示下拉列表
    isShowList: false,//判断是点击内容隐藏光标的,还是点击空白隐藏光标的
   }
  },

详细函数解析:

//显示光标和失去光标事件  
   showList(state) {//state用于判断是否是得到光标事件还是失去光标事件
    if (state) {
     this.state = state//显示下拉列表
    } else {
     if(this.isShowList){//this.isShowList用于判断是否是下拉列表里的内容点击的事件
      //把this.isShowList赋值为false让点击空白区能再次触发失去光标事件
      this.isShowList = false
      //让input一直都有光标事件
      this.$refs.search.focus()
     }else {
      this.state = state //隐藏下拉框
     }
    }
   },
   handleSearch(data) {//data搜索的数据
    this.search = data//赋值
    this.isShowList = true//这是区别是否是内容区的点击事件
   }

详细过程

  1. 点击input标签触发showList(true)方法,有它是true直接执行 this.state = state//显示下拉列表
  2. 点击下拉框内容触发handleSearch(data)方法 把 this.isShowList = true 标注这是在下拉框内容的点击事件,将不会隐藏下拉框
  3. 最后通过blur触发showList(false),他将根据this.isShowList判断是否隐藏下拉框,当this.isShowList是true时,执行this.isShowList = false 把this.isShowList回复原样,让点击空白区也能隐藏下拉框,
  4. this.$refs.search.focus()让input再次获得光标事件,这将为点击空白区能触发失去光标事件让下拉框隐藏起来

参考:https://3water.com/article/171151.htm

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

Javascript 相关文章推荐
jquery.validate使用攻略 第二部
Jul 01 Javascript
基于jquery的web页面日期格式化插件
Nov 15 Javascript
JavaScript按值删除数组元素的方法
Apr 24 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
Nov 25 Javascript
JavaScript中数组常见操作技巧
Sep 01 Javascript
浅谈Vue-cli 命令行工具分析
Nov 22 Javascript
利用Angular2 + Ionic3开发IOS应用实例教程
Jan 15 Javascript
微信小程序冒泡事件及其阻止方法实例分析
Dec 06 Javascript
后台使用freeMarker和前端使用vue的方法及遇到的问题
Jun 13 Javascript
使用JavaScript计算前一天和后一天的思路详解
Dec 20 Javascript
vue项目实现减少app.js和vender.js的体积操作
Nov 12 Javascript
浅谈JavaScript作用域
Dec 06 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
Sep 29 #Javascript
微信小程序 行的删除和增加操作实现详解
Sep 29 #Javascript
微信小程序 轮播图实现原理及优化详解
Sep 29 #Javascript
为nuxt项目写一个面包屑cli工具实现自动生成页面与面包屑配置
Sep 29 #Javascript
React-redux实现小案例(todolist)的过程
Sep 29 #Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
Sep 29 #Javascript
在Layui中实现开关按钮的效果实例
Sep 29 #Javascript
You might like
php中mail函数发送邮件失败的解决方法
2014/12/24 PHP
php cli配置文件问题分析
2015/10/15 PHP
PHP常用的类封装小结【4个工具类】
2019/06/28 PHP
解决php扩展安装不生效问题
2019/10/25 PHP
Jquery实现页面加载时弹出对话框代码
2013/04/19 Javascript
Javascript判断文件是否存在(客户端/服务器端)
2014/09/16 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
JS实现的通用表单验证插件完整实例
2015/08/20 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
jQuery插件实现可输入和自动匹配的下拉框
2016/10/24 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
js实现导航吸顶效果
2017/02/24 Javascript
详解使用vue实现tab 切换操作
2017/07/03 Javascript
基于js中this和event 的区别(详解)
2017/10/24 Javascript
深入理解Vue router的部分高级用法
2018/08/15 Javascript
在React项目中使用Eslint代码检查工具及常见问题
2018/10/10 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
layui form表单提交后实现自动刷新
2019/10/25 Javascript
使用PYTHON接收多播数据的代码
2012/03/01 Python
python with提前退出遇到的坑与解决方案
2018/01/05 Python
python编写简易聊天室实现局域网内聊天功能
2018/07/28 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
python 双循环遍历list 变量判断代码
2020/05/04 Python
Python 如何对文件目录操作
2020/07/10 Python
想学画画?python满足你!
2020/12/24 Python
css3如何绘制一个圆圆的loading转圈动画
2018/01/09 HTML / CSS
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
FLOS美国官网:意大利高级照明工艺的传奇
2018/08/07 全球购物
办公室前台的岗位职责
2013/12/20 职场文书
大学四年个人的自我评价
2014/02/26 职场文书
2015年世界无烟日活动方案
2015/05/04 职场文书
欢迎新生标语2015
2015/07/16 职场文书
高中团支书竞选稿
2015/11/21 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python
SQL基础查询和LINQ集成化查询
2022/01/18 MySQL