vue 简单自动补全的输入框的示例


Posted in Javascript onMarch 12, 2018

实现一个输入框,输入信息后显示由后台返回的数据,供用户选择,之前用的elm的组件,不过那个有点大。。。简单的情况下自己实现一个也能满足要求。。。应该吧。。。

vue 简单自动补全的输入框的示例

主题包括一个input用于输入,一个div用于展示数据,div里面是数据项item

当在input中按下回车时,会根据信息去后台获取数据,如果用户点击了别的地方,input失去焦点,则提示的div也应该收起来

bug:

在blur事件中,如果直接将isShow设置为false会出问题,先失去焦点,显示面板消失,所以你的点击不会被监听到。。。设置一个计时器,在点击之后10ms后将面板收起来,问题解决。。。

显示div将内容撑开,改变其他组件布局,设置div的属性,即可,高度设为0,z-index很大,就不会改变其他组件位置

height: 0;
z-index: 999;
<template>
 <div class="container">
  <input v-model="msg" @keyup.enter="search" class="msg" @blur="blur"/>
  <div class="select-panel">
   <div v-show="isShow" v-for="w in words" class="select-item" @click="click_item(w)">{{w['content']}}</div>
  </div>
 </div>
</template>

简单实现代码

<template>
 <div class="container">
  <input v-model="msg" @keyup.enter="search" class="msg" @blur="blur"/>
  <div class="select-panel">
   <div v-show="isShow" v-for="w in words" class="select-item" @click="click_item(w)">{{w['content']}}</div>
  </div>
 </div>
</template>

<script>
 import {search_word} from "../api/word-api";

 export default {
  name: "auto-complete",
  data() {
   return {
    msg: '',
    words: [],
    isShow: false
   }
  },
  computed: {},

  methods: {
   blur() {
    setTimeout(() => {
      this.isShow = false
     },
     200)
   },
   async search() {
    console.log('search msg', this.msg)
    this.words = await search_word(this.msg)
    console.log(this.words)
    this.isShow = true
   },
   click_item(w) {
    console.log('click word', w)
    this.$emit('add_word', w)
   }
  },

 }
</script>

<style scoped>

 .container {
  display: flex;
  flex-grow: 0;
  flex-shrink: 0;
  box-sizing: border-box;
 }

 .msg {
  margin: 5px;
 }

 .select-panel {
  height: 0;
  z-index: 999;

 }

 .select-item {
  /*height: 0;*/
  z-index: 999;
  margin: 1px;
  padding: 2px;
  background: #fff;
  opacity: 0.8;
 }
</style>

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

Javascript 相关文章推荐
二级域名转向类
Nov 09 Javascript
JavaScript Event学习第六章 事件的访问
Feb 07 Javascript
js实现点击添加一个input节点
Dec 05 Javascript
JS实现根据密码长度显示安全条功能
Mar 08 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
Jun 22 jQuery
浅谈ECMAScript6新特性之let、const
Aug 02 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
Aug 24 Javascript
Vue实现数字输入框中分割手机号码的示例
Oct 10 Javascript
vue v-model实现自定义样式多选与单选功能
Jul 05 Javascript
JS简单数组排序操作示例【sort方法】
May 17 Javascript
JavaScript实现鼠标移入随机变换颜色
Nov 24 Javascript
JavaScript实现滚动加载更多
Dec 27 Javascript
webpack打包js的方法
Mar 12 #Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
Mar 12 #Javascript
vue路由懒加载的实现方法
Mar 12 #Javascript
vue移动UI框架滑动加载数据的方法
Mar 12 #Javascript
详解vuex的简单使用
Mar 12 #Javascript
js提取中文拼音首字母的封装工具类
Mar 12 #Javascript
基于express中路由规则及获取请求参数的方法
Mar 12 #Javascript
You might like
一个php作的文本留言本的例子(五)
2006/10/09 PHP
PHP parse_url 一个好用的函数
2009/10/03 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
动态修改DOM 里面的 id 属性的弊端分析
2008/09/03 Javascript
JQuery优缺点分析说明
2010/06/09 Javascript
面向对象继承实例(a如何继承b问题)(自写)
2013/07/01 Javascript
javascript处理表单示例(javascript提交表单)
2014/04/28 Javascript
js获取页面description的方法
2015/05/21 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
2015/06/30 Javascript
基于jQuery实现左右图片轮播(原理通用)
2015/12/24 Javascript
json传值以及ajax接收详解
2016/05/24 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
JS脚本实现动态给标签控件添加事件的方法
2016/06/02 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
vue 自定义右键样式的实例代码
2019/11/06 Javascript
解决Mint-ui 框架Popup和Datetime Picker组件滚动穿透的问题
2020/11/04 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
Javascript实现打鼓效果
2021/01/29 Javascript
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
Python实现二叉搜索树
2016/02/03 Python
python smtplib模块实现发送邮件带附件sendmail
2018/05/22 Python
python yield关键词案例测试
2019/10/15 Python
Python连接字符串过程详解
2020/01/06 Python
Python3.7下安装pyqt5的方法步骤(图文)
2020/05/12 Python
Python自动发送和收取邮件的方法
2020/08/12 Python
极度干燥澳大利亚官方网站:Superdry澳大利亚
2019/03/28 全球购物
德国自然时尚和有机产品购物网站:Waschbär
2019/05/29 全球购物
为什么要优先使用同步代码块而不是同步方法?
2013/01/30 面试题
八年级数学教学反思
2014/01/31 职场文书
外语系毕业生求职自荐信
2014/04/12 职场文书
驳回起诉裁定书
2015/05/19 职场文书
文艺晚会开场白
2015/05/29 职场文书
MYSQL(电话号码,身份证)数据脱敏的实现
2021/05/28 MySQL
使用Springboot实现健身房管理系统
2021/07/01 Java/Android