vue怎么不通过dom操作获取dom节点
今天写一个公众号的项目,写了一个vue的搜索组件,点击搜索框时,背景出现一个遮罩,代码结构如下:
template:`<div class="searchBar-div">
<input v-model="keyWord"
@keyup.enter='startSearch()'
class="searchBar-input"
type="search"
placeholder="搜索"
/>
<div class="searchBar-mask"
></div>
</div>`,
但是问题出现了,在手机端测试的时候发现,点击遮罩或者点击手机软键盘上的确定都无法使搜索框失焦,遮罩和软键盘都无法消失,只有点击软键盘上的完成或者“▽”符号(打不出那个符号,大家懂就好/捂脸),遮罩和软键盘才能消失。
那么如何使搜索框失焦呢?
当然,如果去操作dom,给遮罩层“searchBar-mask”绑定click事件,点击它的时候,再通过dom操作,使input失焦就解决问题了。
但是,整个项目没有用到jq,也没有用到dom操作,也不想因为这么一个小问题引进jq或者dom操作,只好另辟蹊径。
查资料啊文档啊,最后发现了ref属性还有vue的$emit,ref属性可以使代码可以获取到当前的dom节点,$emit可以是一个发射器,可以向自定义的事件发射信息,就有了一个思路,点击遮罩的时候,向一个自定义的事件发射信息,在搜索框监听这个自定义事件,收到信息后用ref属性获取当前的dom节点,使其失焦,完成!
最后的代码:
var searchBarComponent = {
template:`<div class="searchBar-div">
<input v-model="keyWord"
@keyup.enter='startSearch()'
v-on:search-blur="this.$refs.input.blur();"
class="searchBar-input"
type="search"
placeholder="搜索"
ref="input"
/>
<div class="searchBar-mask"
@click="searchBlur"
></div>
</div>`,
data:function(){
return{
keyWord:'',
}
},
methods: {
startSearch: function startSearch() {
this.$refs.input.blur();
console.log('Do Check'+this.keyWord);
this.$emit('searcher-key-word',this.keyWord);
},
searchBlur:function(){
this.$emit('search-blur');
}
}
}
template:`<div class="searchBar-div"> <input v-model="keyWord" @keyup.enter='startSearch()' v-on:search-blur="this.$refs.input.blur();" class="searchBar-input" type="search" placeholder="搜索" ref="input" /> <div class="searchBar-mask" @click="searchBlur" ></div> </div>`,
vue怎么不通过dom操作获取dom节点的更多相关文章
- javascript的DOM操作获取元素
一.document.getElementById() 根据Id获取元素节点 <div id="div1"> <p id="p1"> ...
- dom操作------获取元素的若干方法
// 1,getElementById:返回元素节点document.getElementById(); // 2,getElementsByClassName:返回HTMLCollection对象( ...
- jQuery-1.9.1源码分析系列(十一) DOM操作续——克隆节点
什么情况下使用到克隆节点? 我们知道在对DOM操作过程中如果直接使用节点会出现节点随操作而变动的情况.比如对节点使用.after/.before/.append等方法后,节点被添加到新的地方,原来的位 ...
- 【学亮IT手记】jQuery DOM操作-获取内容和属性
jQuery拥有可操作HTML元素和属性的强大方法. 其中非常重要的部分就是操作DOM的能力. DOM--文档对象模型. <!DOCTYPE html> <html> < ...
- js dom操作获取节点的一些方法
在复习javascript基础的时候,整理了一下js中获取节点的一些常用的方法,见代码: //js获取下一个兄弟节点 function getNextSibling(eleObj){ var next ...
- dom操作------获取长/宽/距离等值的若干方法
1.offsetLeft:获取元素边框以外至文档顶的距离:若其祖先元素有定位属性position则返回值为元素到该定位元素的距离,不包括祖先元素的三宽(padding,border,margin),且 ...
- JavaScript的DOM操作获取元素的大小
通过 style 内联获取元素的大小 需要注意的是style 获取只能获取到行内 style 属性的 CSS 样式中的宽和高,如果有获取:如果没有则返回空. <!DOCTYPE html> ...
- JavaScript的DOM操作获取元素实际大小
clientWidth 和 clientHeight 这组属性可以获取元素可视区的大小,可以得到元素内容及内边距所占据的空间大小. 返回了元素大小,但没有单位,默认单位是 px,如果你强行设置了单位, ...
- JavaScript的DOM操作获取元素周边大小
一.clientLeft 和 clientTop 这组属性可以获取元素设置了左边框和上边框的大小,目前只提供了 Left 和 Top 这组,并没有提供 Right 和 Bottom. <scri ...
随机推荐
- jqGrid资源
在比较多个Grid后决定以后还是用jqGrid,并且是free-jqgrid分支版, jqgrid优点很多: 加载大量数据时效率很好, 支持排序, 支持过滤, 支持resize, 支持分页, 支持e ...
- 开发一个 Windows 级别的操作系统难度有多大?
在搜索进程相关问题的时候,无意间看到了知乎上面的这个问题,这也是困惑我的问题,只是自己比较懒,没有刨根问底,这次无意间看到了,并且认真看了大神的回答,很受启发,作为记录,贴于此,与各位分享: 来源:知 ...
- [CPP] Object Based Class
前言 几年前接触到一款很好玩的RPG游戏,叫作CPP.最近想着怀念一下,又不想干巴巴地去玩.于是乎,我打算写几篇攻略,主要是记录一下游戏中一些奇妙的点.游戏的第一章是面向对象程序设计,其中又分为基于对 ...
- 样式styles和主题theme
参考资料:http://blog.csdn.net/sshhbb/article/details/7219838/ /values/styles.xml <resources> <! ...
- C#实现文件下载的几种方式
上篇博客也说了下C#中通过XML导出Excel,这些文件操作都挺有用的,下面是文件的下载,之前做项目都是把它写的空间日志中,以后有时间了把它们都弄出来 先把有问题的代码贴出来吧 using Syste ...
- anaconda使用,jupyter notebook的使用方法
1. 通过anaconda安装不同的python环境 1) conda create -n python36 python=3.5 2) 激活虚拟环境: activate python36 # 进 ...
- 【转】 面向对象(OO)程序设计
前言 本文主要介绍面向对象(OO)程序设计,以维基百科的解释: 面向对象程序设计(英语:Object-oriented programming,缩写:OOP),指一种程序设计范型,同时也是一种程序开发 ...
- Java实现进程调度算法(一) FCFS(先来先服务)
一.概述 因为这次os作业对用户在控制台的输入输出有要求,所以我花了挺多的代码来完善控制台的显示. 也因为我这次要实现多个类似算法,所以将一些共性单独提取出来作为一个类. 如果只想要和算法有关的核心代 ...
- 【SSH网上商城项目实战03】使用EasyUI搭建后台页面框架
转自:https://blog.csdn.net/eson_15/article/details/51312490 前面两节,我们整合了SSH并且抽取了service和action部分的接口,可以说基 ...
- 中小型研发团队架构实践三:微服务架构(MSA)
一.MSA 简介 1.1.MSA 是什么 微服务架构 MSA 是 Microservice Architect 的简称,它是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相通讯.互相 ...